【问题标题】:Separating/combining gulp task sources using yargs and gulp-if使用 yargs 和 gulp-if 分离/组合 gulp 任务源
【发布时间】:2017-12-18 17:31:21
【问题描述】:

假设我想将所有 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 数组中注入 gulp if 语句,如果传递了正确的标志,它将只包含生产专用文件。

一些大胆的想法: - 我应该在这里创建两个文件吗?一个包含跨环境所需的一切的基础,然后是特定于生产的基础,然后将它们结合起来?看起来不必要的复杂,但可以解决问题。

【问题讨论】:

    标签: javascript node.js gulp yargs


    【解决方案1】:

    如果您的目标是更加 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 可能会起到作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多