假设我想将所有 js 文件包含在按特定顺序连接的源文件夹中(使用 gulp-concat)。但是,如果有生产标志,我只想包含某些文件。
例如,在生产中我需要这些文件:
- modals.js
- utilities.js
- analytics.js
- signup.js
- cookies.js
但是,对于本地和登台,我不需要这两个:
- analytics.js
- cookies.js
是否可以使用 yargs 或者 gulp-if 来指定这一点?我知道我可以有两个来源列表,例如:
if (argv.production) {
return gulp.src([
'modals.js',
'utilities.js',
'analytics.js',
'signup.js',
'cookies.js'
])
} else if (argv.staging) {
return gulp.src([
'modals.js',
'utilities.js',
'signup.js',
])
}
但是,这意味着我没有遵守 DRY 原则,并且感觉很愚蠢并且容易出错。如果任务有生产标志,我可以以某种方式将它们拼接在一起作为一个仅包含分析和 cookie 之类的内容的单一源吗?
在理想的情况下,我可以在 gulp.src 数组中注入(inject) gulp if 语句,如果传递了正确的标志,则该数组仅包含仅用于生产的文件。
一些大声的思考: - 我应该在这里创建两个文件吗?一个是包含跨环境所需的所有内容的基础,然后是特定于生产的基础,然后将它们组合起来?看起来不必要的复杂,但可以解决问题。
最佳答案
如果您的目标是更加 DRY,您可以尝试一下,因为您的暂存文件集是生产文件的子集:
var base_list = ['modals.js', 'utilities.js', 'signup.js'];
if (argv.staging) {
return gulp.src(base_list);
} else if (argv.production) {
var prod_list = base_list.concat(['analytics.js', 'cookies.js']);
return gulp.src(prod_list);
}
或者更简化(只要只有生产需要其他文件,并且所有其他环境都获取子集):
var file_list = ['modals.js', 'utilities.js', 'signup.js'];
if (argv.production) {
file_list = file_list.concat(['analytics.js', 'cookies.js']);
}
return gulp.src(file_list);
可能还有一些其他特定于 gulp 的最佳实践或工具可以在这里发挥作用,但一些简单的 JavaScript 可能可以解决问题。
关于javascript - 使用 yargs 和 gulp-if 分离/组合 gulp 任务源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873539/