javascript - 使用 yargs 和 gulp-if 分离/组合 gulp 任务源

标签 javascript node.js gulp yargs

假设我想将所有 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/

相关文章:

javascript - 是 switch(true) {... 有效的 javascript 吗?

javascript - 使分页与其计数一起工作

jquery - 允许前端 JavaScript POST 请求到 https ://accounts. spotify.com/api/token 端点

javascript - runSequence 不适用于 gulp?

css - 如何使用 gulp 仅将引用的 .css 复制到目标?

javascript - Sails.js 水线破坏 "lower or equal"标准

javascript - 谷歌地图未在 chrome 中显示

Angular2、Gulp、SystemJS -> 默认扩展问题

javascript - 即使关闭后嵌入式视频仍会继续播放

node.js - 在我的网站上放慢流氓网络 srappers 并仍然使用 Varnish