首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gulp jshint:如何使构建失败?

gulp jshint:如何使构建失败?
EN

Stack Overflow用户
提问于 2015-01-09 10:12:42
回答 2查看 17.4K关注 0票数 29

如果JSHint中有错误,我希望我的Gulp构建失败。

根据documentation of gulp-jshint,我可以使用“失败报告器”。

但是,以下操作不起作用:

代码语言:javascript
复制
gulp.task("lint", function() {
     return gulp.src(JS_SOURCES)
        .pipe(jshint())
        .pipe(jshint.reporter("jshint-stylish"))
        .pipe(jshint.reporter("fail"));
});

上面的任务总是返回退出代码0,即使JSHint中有错误也是如此。

我使用的是gulp 3.8.10和gulp-jshint 1.9.0。

在github中有关于gulp-jshint herehere的讨论……但根据这些讨论,我推测上面的代码应该可以与最新版本的gulp和gulp jshint一起工作。然而,它不是...

有没有人想过如何正确地用gulp jshint使构建失败?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 17:43:07

TLDR;在GulpJS在稳定版本中提供良好的解决方案之前,请使用Bahmutov on GitHub建议的解决方法。

他使用自己的过滤器创建了一个变通方法:

代码语言:javascript
复制
var map = require('map-stream');
var exitOnJshintError = map(function (file, cb) {
  if (!file.jshint.success) {
    console.error('jshint failed');
    process.exit(1);
  }
});
gulp.task('lint', function() {
  gulp.src('example.js')
    .pipe(jshint())
    .pipe(jshint.reporter('jshint-stylish'))
    .pipe(exitOnJshintError);
});

Long answer

这个问题已经作为问题发布在GitHub: How to fail gulp build? #6 上。请特别注意Bahmutov's comment

他提出的解决方案(hack)是添加他自己的过滤器,并在出现提示错误时执行process.exit(1);,如下所示:

代码语言:javascript
复制
var map = require('map-stream');
var exitOnJshintError = map(function (file, cb) {
  if (!file.jshint.success) {
    console.error('jshint failed');
    process.exit(1);
  }
});

gulp.task('lint', function() {
  gulp.src('example.js')
    .pipe(jshint())
    .pipe(jshint.reporter('jshint-stylish'))
    .pipe(exitOnJshintError);
});

本期链接到另一期Plugin doesn't fail build #10。他们在这里基本上说的是,Gulp应该处理构建失败的问题。这导致了另一个问题,该问题已在GulpJS上报告:Controlling failing builds #113。轮到他搬到"finish then fail" #20去了。后者已经修复,可以在changing this #347上跟踪Gulp JS版本。

所以,我们必须等待它的发布...

同时,我们可以使用我在TLDR上的帖子顶部提到的变通方法;

我已经用我的gulpfile.js in task scripts-app实现了它。

票数 16
EN

Stack Overflow用户

发布于 2015-06-25 22:06:36

这对我很管用。我也有同样的任务:

代码语言:javascript
复制
return gulp.src(['./src/**/*.js', './docs_src/**/*.js'])
    .pipe(jshint())
    .pipe(jshint.reporter('jshint-stylish'))
    .pipe(jshint.reporter('fail'))

这就是发生的事情:

代码语言:javascript
复制
$ gulp --version
[11:03:41] CLI version 3.9.0
[11:03:41] Local version 3.9.0

[14559:3392 - 0:2151] 11:03:41 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)  
$ cat package.json 
{
  "name": "fsstatic2",
  "version": "0.0.0",
  "description": "fsstatic",
  "author": "FreedomSponsors",
  "devDependencies": {
    "gulp": "~3.9.0",
    "gulp-concat": "~2.5.2",
    "gulp-linker": "~0.1.7",
    "gulp-webserver": "~0.9.1",
    "yargs": "~3.12.0",
    "gulp-sass": "~2.0.1",
    "gulp-ng-templates": "0.0.6",
    "gulp-ngtemplate": "~0.2.5",
    "gulp-htmlmin": "~1.1.3",
    "merge-stream": "~0.1.7",
    "gulp-copy": "0.0.2",
    "gulp-jshint": "~1.11.0",
    "jshint-stylish": "~2.0.1"
  }
}

[14559:3392 - 0:2152] 11:04:01 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)  
$ gulp jshintall
[11:04:11] Using gulpfile ~/work/solo/fsstatic2/gulpfile.js
[11:04:11] Starting 'jshintall'...

/home/tony/work/solo/fsstatic2/src/components/todo_example/todo.js
  line 26  col 23  Missing semicolon.

  ⚠  1 warning

[11:04:11] 'jshintall' errored after 467 ms
[11:04:11] Error in plugin 'gulp-jshint'
Message:
    JSHint failed for: /home/tony/work/solo/fsstatic2/src/components/todo_example/todo.js

[14559:3392 - 0:2153] 11:04:11 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)  
$ echo $?
1
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27852814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档