根据 NODE_ENV 设置 gulp 项任务

Set gulp tasks depending on NODE_ENV

有没有办法根据设置的 NODE_ENV 指定 gulp 任务?

例如在我的 package.json 文件中,我有这样的东西:

"scripts": {
    "start": "gulp"
 }

而且我有多项 gulp 任务

gulp.task('development', function () {
   // run dev related tasks like watch 
});

gulp.task('production', function () {
   // run prod related tasks
});

如果我设置NODE_ENV=production npm start,我可以指定只运行 gulp production吗?或者有更好的方法吗?

根据 process.env.NODE_ENV 值完成第一个 gulp 任务 运行 其他 gulp 任务。

gulp.task('launcher', function(){
  switch (process.env.NODE_ENV){
    case 'development':
      // Run dev tasks from here
      break;
    case 'production':
      // Run prod tasks
      break;
  }
});
if (process.env.NODE_ENV === "production")
  // whatever

在你的默认 gulp 任务中使用一个三元组,你可以有类似的东西:

gulp.task('default',
  [process.env.NODE_ENV === 'production' ? 'production' : 'development']
);

然后您将能够在 package.json 中保留单个 gulp 命令并像您所说的那样使用它:

NODE_ENV=production npm start

您的 NODE_ENV 变量的任何其他值都将启动 development 任务。


您当然可以使用允许多个任务并避免 if 树地狱的对象进行高级用法:

var tasks = {
  development: 'development',
  production: ['git', 'build', 'publish'],
  preprod: ['build:preprod', 'publish:preprod'],
  ...
}

gulp.task('default', tasks[process.env.NODE_ENV] || 'fallback')

请记住,在给出一组任务时,它们将 运行 并行。

另一个简单的方法可能是

gulp.task('set-dev-env', function () {
    return process.env.NODE_ENV = 'development';
});

gulp.task('set-prod-env', function () {
    return process.env.NODE_ENV = 'production';
});

gulp.task('development', ['set-dev-env'], function () {
    // your code
});

gulp.task('production', ['set-prod-env'], function () {
    // your code
});

运行 gulp productiongulp development.

您也可以使用 gulp-mode 插件。

用法:

    var gulp = require('gulp');
    var mode = require('gulp-mode')();
    var uglify = require('gulp-uglify');

    gulp.task('default', function() {
      gulp.src('src/*.js')
          .pipe(mode.production(uglify()))
          .pipe(gulp.dest('dist'));
    });

    var isProduction = mode.production();
    if (isProduction) {
        console.log("Production mode");
    }

开始构建为:

gulp build --production

对于“npm 运行-script”用例:

package.json :-
    "scripts": {
        "devbld": "gulp build --development",
        "prodbld": "gulp build --production",
      }

    $ npm run devbld
    $ npm run prodbld