如何在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.
答案 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.