0

这似乎是一个基本问题,但我不知道该怎么做。这是如何在 gulp 中进行的

我希望在保存带有 jshint 错误的文件时使 Grunt 构建失败。输出表明 jshint 失败但 Grunt 仍然成功完成。

grunt.initConfig({
    watch: {
      js: {
        files: ['/scripts/{,**}/*.js'],
        tasks: ['newer:jshint:all']
      }
    }
})

我知道有,grunt.fail但我将如何在这里使用它?

4

1 回答 1

2

以下要点将通过 CLI 报告错误,并且在保存文件jshint时无法执行任何后续构建步骤。.js

您将需要根据您的要求进行调整:

目录结构:

project
│
├──package.json
│
├───scripts
│   │
│   └───test.js
│
├─── Gruntfile.js
│
└───node_modules
    │
    └─── ...

包.json

{
  "name": "stack40031078",
  "version": "0.0.1",
  "description": "Answer to stack question 40031078",
  "author": "RobC",
  "license": "Apache-2.0",
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-contrib-jshint": "^1.0.0",
    "grunt-contrib-watch": "^1.0.0",
    "grunt-newer": "^1.2.0"
  }
}

Gruntfile.js

module.exports = function (grunt) {

    grunt.initConfig({

        pkg: grunt.file.readJSON('package.json'),

        // VALIDATE JS
        jshint: {
            // Note we're using 'src:' instead of 'all:' below.
            files: {
                src: './scripts/{,**}/*.js'
            },
            options: {
                // Use your jshint config here or define them in
                // a separate .jshintrc file and set the flag to:
                //
                // jshintrc: true
                curly: true,
                eqeqeq: true,
                immed: true,
                latedef: true,
                newcap: true,
                noarg: true,
                sub: true,
                undef: true,
                boss: true,
                eqnull: true,
                browser: true,
                smarttabs: true,
                globals: {}
            }
        },

        // WATCH THE JS FILES
        watch: {
            js: {
                files: ['./scripts/{,**}/*.js'],
                // NOTE: we're not using 'newer:jshint:all' below, just 'newer:jshint'
                tasks: ['newer:jshint' /* <-- Add subsequent build tasks here. E.g. ,'concat' - A registered task can also be added. E.g. 'default' */]
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-newer');

    grunt.registerTask('default', [

    ]);

};

测试.js

console.log('Hello World');

var test = function() {
    return 'test';
};

测试演示要点

  1. cdproject目录
  2. $ npm install
  3. $ grunt watch
  4. 打开并对 , 进行简单的编辑test.js(例如在文件末尾添加一个新行),然后保存更改。

CLI 报错如下:

    Running "jshint:files" (jshint) task
       ./scripts/test.js
          1 |console.log('Hello Universe');
             ^ 'console' is not defined.

    >> 1 error in 1 file
    Warning: Task "jshint:files" failed. Use --force to continue.

    Aborted due to warnings.
    Completed in 0.965s at Fri Oct 14 2016 10:22:59 GMT+0100 (BST) - Waiting...

笔记:

tasks在对象数组中指定的任何后续构建任务watch.js(例如concat,根据 中的注释Gruntfile.js),将不会使用此要点调用,因为jshint任务失败(......concat当然任务还没有定义!)。

但是,当 JavaScript 文件成功传递任务时,将调用对象数组jshint中定义的任何后续构建任务。taskswatch.js

我希望这有帮助!

于 2016-10-14T09:48:21.987 回答