多束时,考虑到这些依赖关系避免重复代码:创建具有杯和Browserify
var browserify = require('gulp-browserify');
var buffer = require('vinyl-buffer');
var maps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
我怎样才能消除这两个任务的代码重复:
gulp.watch('source/js/site/*.js', ['build-site-js']);
gulp.watch('source/js/admin/*.js', ['build-admin-js']);
gulp.task('build-site-js', function() {
return gulp.src('source/js/site/site-client.js') // DIFFERENT
.pipe(browserify({ debug: true }))
.pipe(buffer())
.pipe(rename('bundle.js')) // DIFFERENT
.pipe(gulp.dest('public/js/'))
.pipe(maps.init({ loadMaps: true }))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(maps.write('./'))
.pipe(gulp.dest('public/js/'))
.pipe(livereload());
});
gulp.task('build-admin-js', function() {
return gulp.src('source/js/admin/admin-client.js') // DIFFERENT
.pipe(browserify({ debug: true }))
.pipe(buffer())
.pipe(rename('admin.js')) // DIFFERENT
.pipe(gulp.dest('public/js/'))
.pipe(maps.init({ loadMaps: true }))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(maps.write('./'))
.pipe(gulp.dest('public/js/'))
.pipe(livereload());
});
注意到,我产生两个Browserify捆绑使用相同的进程。这两个任务之间的唯一区别是源文件和目标文件的名称。 (我已经用// DIFFERENT
注释标出了区别。)
理想情况下,我想单个gulp.watch('source/js/**/*.js', ['build-js']);
,然后在任务回调中确定发生更改的目录,并设置源文件和目标文件动态地命名。
如果Gulp任务回调函数提供了触发它的源代码路径(类似于DOM回调中的“e.target”),这会更简单。有没有办法走上这条道路? –
@ŠimeVidas我曾经想过,并尝试过,但没有找到办法。编写所有这些吞咽任务是非常烦人的......但是,自从你发布这个问题后,我再次进行了一项研究,它真的会简化它很多。 – baao