【问题标题】:gulp-jscs doesn't output anything when used in gulp-watch pipelinegulp-jscs 在 gulp-watch 管道中使用时不输出任何内容
【发布时间】:2015-09-25 16:47:40
【问题描述】:

我的 gulpfile 中有以下(简化的)设置:

var gulp = require('gulp');
var jshint = require('gulp-jshint');
var jscs = require('gulp-jscs');
var watch = require('gulp-watch');

var paths = {
        scripts: ['js/*.js']
    }    
var jscsRunner = jscs({
        disallowMixedSpacesAndTabs: true // etc
    });    
var jshintRunner = jshint({
        browser: true // etc
    });

// this outputs messages from jshint no problem
gulp.task('jshint', function() {
    return gulp.src(paths.scripts)
    .pipe(jshintRunner)
    .pipe(jshint.reporter('default'));
});

// this outputs messages from jscs no problem
gulp.task('jscs', function() {
    return gulp.src(paths.scripts)
    .pipe(jscsRunner);
});

// this only outputs messages from jshint
gulp.task('watch', function() {
    return watch(paths.scripts)
    .pipe(jscsRunner)
    .pipe(jshintRunner)
    .pipe(jshint.reporter('default'));
});

我的问题是 - 如前所述 - 在watch 任务中没有从jscs 生成输出,即使管道与jscs 任务中的管道基本完全相同,它按预期工作。

(我在 Windows 上运行它。)

编辑:此问题已在此处复制和讨论:https://github.com/jscs-dev/gulp-jscs/pull/66

【问题讨论】:

  • 您使用的是什么 gulp-watch 版本? 2.x、3.x 和 4.x 之间存在巨大差异。
  • 我真的很想知道为什么这被否决了。
  • 我不确定,但可能是因为 gulp-jscs 现在supports reporters,并且使用它的方式已经改变(以及documentation)?
  • @FabrícioMatté 当然,但在 SO 上一直都是这样。问题和答案已经过时(或者,换句话说,与不再常用的版本相关)。对此投反对票的人肯定有比“这不再是问题”更好的理由。
  • 没错,我只是在猜测。无论如何,投票是一个匿名的过程,它鼓励人们投票,而不需要任何特定的理由或负担。例如,当我更积极地参与/调节 SO 时,我通常会在我的零分问题上得到一些报复性的反对票。遗憾的是,由于投票是匿名的,并且不需要适当的理由,因此没有太多工作要做。

标签: gulp gulp-watch jscs


【解决方案1】:

我能够使用你的脚本,稍微清理一下,重构一些代码,然后我就能让它在我的机器上运行:

var gulp = require('gulp');
var jshint = require('gulp-jshint');
var jscs = require('gulp-jscs');

var paths = {
        scripts: ['js/*.js']
    }    

// this outputs messages from jshint no problem
gulp.task('jshint', function() {
    return gulp.src(paths.scripts)
        .pipe(jshint({browser: true}))
        .pipe(jshint.reporter('default'));
});

// this outputs messages from jscs no problem
gulp.task('jscs', function() {
    return gulp.src(paths.scripts)
    .pipe(jscs({ disallowMixedSpacesAndTabs: true }));
});

// this only outputs messages from jshint
gulp.task('watch', function() {
    return gulp.watch(paths.scripts,['jscs','jshint']);
});

需要注意的几点:

  1. 到目前为止,据我所知,watch 现在已内置于 gulp 中,因此不需要 gulp-watch。我在我的机器上运行 gulp 版本 3.8.11,上面的脚本运行良好,我的机器上没有安装任何名为“gulp-watch”的模块。所以我会更新到最新版本的 gulp 并从你的脚本和你的 package.json 中删除 gulp-watch 要求。
  2. 如果需要,您可以将 jshint 和 jscs 的选项放入单独的文件中,并将这些文件的路径分别作为 jshint 和 jscs 的参数包含在内。
  3. 除了我所做的重构之外,代码按预期工作,所以我不确定您的代码中到底有什么不正确的地方,但由于我是 gulp 的新手,我很难推测可能有什么您在 watch 语句中进行的菊花链管道调用有误。

【讨论】:

  • 还想提一下,我开始编写一个与您的脚本非常相似的脚本,这就是为什么我能够重构您的代码以使其正常工作,因为它与我的脚本非常相似。我在脚本中遇到了不同的问题,但如果您愿意,欢迎您使用我在脚本中为您所做的改进:stackoverflow.com/questions/30418131/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2017-12-01
  • 1970-01-01
  • 2021-09-19
  • 2016-06-04
  • 1970-01-01
相关资源
最近更新 更多