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),这对我个人来说更容易处理:-)非常酷的使用