多个源和目录的单一gulp任务

时间:2016-09-18 13:32:24

标签: gulp

我想要导入{s>所有 并非{/ 1}}的所有。一条规则很好,而不是为每个模块编写新规则。

通常我的任务看起来像这样:

node_modules

但是因为我只想要对我的项目有用的那些,而不是,例如,对gulp有用,我需要指定它们。但是,如果我指定了多个源,它们将全部组合在gulp.task('node_modules', function () { return gulp.src('node_modules/**/*') .pipe(plumber({ handleError: function (err) { console.log(err); this.emit('end'); } })) .pipe(gulp.dest('build/node_modules')) .pipe(reload({ stream: true })) }) 文件夹中,因此无法使用。另一方面,如果我将调用抽象为gulp任务(如下面的想法),我想我可能会遇到缺少多个返回值的问题。

我在想这样的事情:

gulp.dest

1 个答案:

答案 0 :(得分:1)

如果你真的知道自己在做什么,那就不难了。

您可以简单地将数组传递给包含每个模块的glob的gulp.src()。然后,您所要做的就是确保所有内容都在目标目录中的正确位置。

您缺少的关键是使用base option来阻止您的模块在同一目录中被挤压在一起。 (您可以在此问题中详细了解此选项的作用:how base option affects gulp.src & gulp.dest)。

gulp.task('node_modules', function () {
  var modules = [ 'event-emitter-es6', 'object-hash', 'urijs' ];
  return gulp.src(modules.map(m => `node_modules/${m}/**/*`, {base:'node_modules'})
    .pipe(plumber({
        handleError: function (err) {
            console.log(err);
            this.emit('end');
        }
    }))
    .pipe(gulp.dest('build/node_modules'))
    .pipe(reload({ stream: true }))    
});

此外,如果要复制的模块数组与dependencies文件中的package.json相同,您也可以从那里获取列表,而不是手动维护它:

var modules = Object.keys(require('./package.json').dependencies);