1

假设我想将所有 js 文件包含在以特定顺序连接的源文件夹中(使用 gulp-concat)。但是,如果有生产标志,我只想包含某些文件。

例如,在生产中我需要这些文件:

  • modals.js
  • 实用程序.js
  • 分析.js
  • 注册.js
  • cookies.js

但是,对于本地和分期,我不想要这两个:

  • 分析.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 语句,如果传递了正确的标志,它将只包含生产专用文件。

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

4

1 回答 1

0

如果您的目标是更加 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 可能会奏效。

于 2017-12-18T18:34:16.290 回答