gulp - 如何用手表连接多个文件?

时间:2015-08-21 21:03:51

标签: javascript sass gulp concat

我想选择几个文件,并从中生成连接文件。并且还希望连接我更改的文件。
这是我的资产树:

assets
  - css
  - js
  - sass
    - _midia_queries.scss
    - media-combine.scss
    - query.scss

所以,我想生成 maximum.css ./ assets / css / media-combine.min.css )和 medium.css ./ assets / css / media-combine.min.css ./ assets / css / query.min.css )。

.min 文件都是由我的 css 任务生成的。见下文:

gulp.task('css', function (done) {
    gulp.src(paths.sass.src)
        .pipe(plugins.changed('dist'))
        .pipe(plugins.sass())
        .pipe(plugins.combineMediaQueries())
        .pipe(plugins.autoprefixer())
        .pipe( isProduction ? plugins.minifyCss() : gutil.noop() )
        .pipe( isProduction ? plugins.rename({ suffix: ".min" }) : gutil.noop() )
        .pipe(gulp.dest(paths.css.dest))
        .on("end", done);
});

我的 concat-css 任务正在使用我的多代文件的坏方法:

gulp.task('concat-css', ['css'], function (done) {
    concatType("css", done);
});

function concatType (type, done) {
    if (isProduction) {
        var task = gulp;
        filesToConcat[type].forEach(function (value) {
            value.files.forEach(function (file, fileIndex) {
                value.files[fileIndex] = paths[type].dest + file;
            });

            gutil.log('File', gutil.colors.green(value.compiled), 'is beign concatenated');
            task = gulp.src(value.files)
                .pipe(plugins.concat(value.compiled))
                .pipe(gulp.dest(paths[type].dest));
            gutil.log('Ready to go!');
        });
        task.on("end", done);
    }
}

更新

当我在控制台/终端上输入 gulp 时,它会完美地运行我的 css concat-css 任务,但是,当< strong> watch 任务由文件更改触发,两者都运行,但只有 css 有效。我的 .min 文件已更新,但我的连接文件未更新。 Gulp file running

任何想法接近这个?感谢。

1 个答案:

答案 0 :(得分:0)

抱歉,这是一个逻辑问题。

在我的concatType函数中,当我设置目标文件的路径时,但是当它在watch上运行时,路径第二次被设置,如下所示:

  

./资产/ CSS /./资产/ CSS / query.min.css

它永远不会奏效。所以,我改变了这个:

 value.files.forEach(function (file, fileIndex) {
     value.files[fileIndex] = paths[type].dest + file;
 });

 task = gulp.src(value.files)

为此:

files = [];
value.files.forEach(function (file) {
    files.push(paths[type].dest + file);
});

task = gulp.src(files)