Gulp 仅当棉绒大量通过时,才进行棕色化

Gulp 仅当棉绒大量通过时,才进行棕色化,gulp,browserify,jshint,Gulp,Browserify,Jshint,我正在努力实现这一大口大口大口地流: 这似乎是一个相当直接的过程,但据我所知,它不可能实现为一个吞咽流 我目前正在这样做: gulp.task('js', function () { return browserify('foo/main.js') .bundle() .pipe(source('bundle.js')) .pipe(streamify(jshint())) .pipe(jshint.reporter('d

我正在努力实现这一大口大口大口地流:

这似乎是一个相当直接的过程,但据我所知,它不可能实现为一个吞咽流

我目前正在这样做:

gulp.task('js', function () {
    return browserify('foo/main.js')
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(streamify(jshint()))
        .pipe(jshint.reporter('default'))
        // source map, minify, …
});

问题是JSHint应该首先运行,仅在更改的文件上运行,如果lint失败,该进程应该中止。在我的设置中,Browserify始终运行,只有在JSHint在整个捆绑包上运行。我可以处理性能损失,但是JSHint的行号对应生成的bundle,而不是我的JS源文件,这是一个痛苦的想法。

这是一个很酷的想法。我已经使用watchify在我的管道中实现了这一点,它将使用默认报告器来lint文件,如果更改的文件没有通过lint测试,则使用fail报告器。尽管这是问题中的建议,但我个人还是会避免这样做,因为你真正想要的只是让你的记者进行皮棉检查,同时让开发观察者仍然在后台生成。否则,您必须继续重新启动任务,这通常会让我感到困扰。不管怎样,代码如下:

'use strict';

var assign       = require('object-assign'),
    gulp         = require('gulp'),
    gutil        = require('gulp-util'),
    merge        = require('merge-stream'),
    jshint       = require('gulp-jshint'),
    source       = require('vinyl-source-stream'),
    watchify     = require('watchify'),
    browserify   = require('browserify');

var resources = {
    mainJS    : 'main.js',
    bundleJS  : 'bundle.js',
    root      : 'www'
};

function res(r) {
    return './' + resources[r];
}

gulp.task('watch', function() {
    var bundler = watchify(browserify(res('mainJS'), assign(watchify.args, {
        fullPaths: false
    })));

    var scripts = function(changedFiles) {
        var compileStream = bundler
            .bundle()
            .on('error', gutil.log.bind(gutil, gutil.colors.red('Browserify Error\n')))
            .pipe(source(res('bundleJS')))
            .pipe(gulp.dest(res('root')));

        if (changedFiles) {
            var lintStream = gulp.src(changedFiles)
                .pipe(jshint())
                .pipe(jshint.reporter('default'))
                .pipe(jshint.reporter('fail'));

            return merge(lintStream, compileStream);
        }

        return compileStream;
    };

    bundler.on('update', scripts);

    return scripts();
});
请注意,这在很大程度上是基于使用watchify()进行快速browserify构建的官方配方,是一项“一体式”任务;也就是说,我通常会在后台的某个地方生成一个任务,只需要很少的日志记录(我使用
--silent
标志运行gulp),这对我个人来说更容易处理:-)

非常酷的使用