gulp.src(globs)来自变量数组

时间:2016-08-09 00:17:08

标签: arrays variables gulp global-variables

如何在gulp.src(globs)中使用变量(数组)?

我有几个Gulp任务使用相同的"组"但是我不知道如何干掉任务以使用传递给globs的变量。

. . .
var configDir   = '../private/app/_config/',
    configFiles = [
        configDir + 'categories.yaml',
        configDir + 'params.yaml',
        configDir + 'taxonomies.yaml'
    ];

// Merge development config yaml(s)
gulp.task('yaml_merge-dev', function() {
  return gulp.src([
        'config.root.yaml',
        configDir + 'site.dev.yaml',
        configFiles
      ])
    .pipe(yamlMerge('config.dev.yaml'))
    .pipe(gulp.dest('../'));
});

// Merge production config yaml(s)
gulp.task('yaml_merge-prod', function() {
  return gulp.src([
        'config.root.yaml',
        configDir + 'site.prod.yaml',
        configFiles
      ])
    .pipe(yamlMerge('config.prod.yaml'))
    .pipe(gulp.dest('../'));
})
. . . // etc.

2 个答案:

答案 0 :(得分:1)

gulp.src()只接受一个平面文件数组,而不是嵌套数组。这意味着您必须将configFiles中的所有文件添加到传递给gulp.src()的数组中。

由于gulp只是JavaScript,因此您可以使用任何可以在JavaScript中组合数组的方法。在您的情况下,Array.prototype.concat()可能是最合适的:

gulp.task('yaml_merge-dev', function() {
  return gulp.src([
    'config.root.yaml',
    configDir + 'site.dev.yaml'
  ].concat(configFiles))
  .pipe(yamlMerge('config.dev.yaml'))
  .pipe(gulp.dest('../'));
});

答案 1 :(得分:1)

您想要 DRY 您的任务是正确的。

使用yargs,您可以将代码范围缩小到使用命令行参数的单个任务。

生成

npm install --save-dev yargs

<强>的Javascript

. . . 
// Require yargs: https://www.npmjs.com/package/yargs
var args = require('yargs').argv;

// Site file based on argument
var siteFile = args.release? 'site.prod.yaml' : 'site.dev.yaml';

// Merge config file based on argument
var yamlMergeConfig = args.release? 'config.prod.yaml' : 'config.dev.yaml';

// Single declatations for readibility
var configDir = '../private/app/_config/';

// Your config files in a single glob
var configFiles = [
        configDir + 'categories.yaml',
        configDir + 'params.yaml',
        configDir + 'taxonomies.yaml'
        configDir + siteFile
    ];

gulp.task('yaml_merge', function() {
  /// <summary>
  /// Merge development or production config yaml(s)
  /// gulp yaml_merge             : deploys the development build
  /// gulp yaml_merge --release   : deploys the release build
  /// </summary>
  return gulp.src(configFiles)
    .pipe(yamlMerge(yamlMergeConfig))
    .pipe(gulp.dest('../'));
});
. . . // etc.