如何创建子管?

时间:2015-03-08 05:01:24

标签: node.js gulp

我想创建一个"子管道"这样我就可以创建两个不同的任务,这些任务经历同一系列的转换,但是将不同的源作为输入并将不同的文件写为输出。如,

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()只是清空我的管道,因为另一端没有任何东西通过。

我不知道如何正确地开始管道,所以我可以推动它通过它。

1 个答案:

答案 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'));