我想创建一个"子管道"这样我就可以创建两个不同的任务,这些任务经历同一系列的转换,但是将不同的源作为输入并将不同的文件写为输出。如,
gulp.task('styles', function() {
return gulp.src(styles, {base: '.'})
.pipe(MY_SUBPIPE_HERE('main.css'))
.pipe(gulp.dest('public/css'))
});
gulp.task('login_styles', function() {
return gulp.src(loginStyles, {base: '.'})
.pipe(MY_SUBPIPE_HERE('login.css'))
.pipe(gulp.dest('public/css'))
});
这是我尝试的内容:
function styleStream(filename) {
return through.obj()
.pipe(plumber())
.pipe(sourcemaps.init({
loadMaps: false,
debug: debug,
}))
.pipe(wrapper({
header: fileHeader,
}))
.pipe(gulpif(/\.less$/,less({
strictMath: true,
strictUnits: true,
})))
.pipe(concat(filename))
.pipe(autoprefixer({
browsers: ['last 2 versions', '> 1%', 'ie 8'],
cascade: false // don't waste time on this
}))
.pipe(gulpif(!debug, minifyCss({
compatibility: 'ie8',
})))
.pipe(sourcemaps.write('.', {
includeContent: true,
sourceRoot: '/',
debug: debug,
}))
.pipe(plumber.stop());
}
但我认为through.obj()
只是清空我的管道,因为另一端没有任何东西通过。
我不知道如何正确地开始管道,所以我可以推动它通过它。
答案 0 :(得分:1)
创建一个接受输入/输出参数的函数:
function styleFn(src, filename) {
return function() {
return gulp.src(src, {base: '.'})
.pipe(plumber())
.pipe(sourcemaps.init({
loadMaps: false,
debug: debug,
}))
.pipe(wrapper({
header: fileHeader,
}))
.pipe(gulpif(/\.less$/,less({
strictMath: true,
strictUnits: true,
})))
.pipe(concat(filename))
.pipe(autoprefixer({
browsers: ['last 2 versions', '> 1%', 'ie 8'],
cascade: false // don't waste time on this
}))
.pipe(gulpif(!debug, minifyCss({
compatibility: 'ie8',
})))
.pipe(sourcemaps.write('.', {
includeContent: true,
sourceRoot: '/',
debug: debug,
}))
.pipe(plumber.stop())
.pipe(gulp.dest('public/css'));
};
}
gulp.task('styles', styleFn(styles, 'main.css'));
gulp.task('login_styles', styleFn(loginStyles, 'login.css'));