根据NODE_ENV设置gulp任务

6

有没有一种方法可以根据设置的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吗?还是有更好的方法来实现这个目标?

这些回答有帮助吗?如果有帮助,请投票并接受;如果仍然有问题,请留言。 - mwotton
5个回答

17

在您的默认 gulp 任务中使用单个三元运算符,您可以得到类似以下内容:

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

那么你就能够在你的 package.json 中只保留单一的 gulp 命令,并像你之前说的那样使用它:

NODE_ENV=production npm start

如果您的NODE_ENV变量设置为除production以外的任何值,则会启动development任务。


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

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

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

请记住,当提供一个任务数组时,它们将会并行运行。


"tasks[process.env.NODE_ENV]' <-- 很酷" - jjalonso
@jjalonso 很高兴你喜欢它 ;) - Preview

2

根据 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;
  }
});

1
另一种简单的方法可能是:
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

非常有帮助!对于gulp4,我使用了以下代码:const setProdEnv = (cb) => { process.env.NODE_ENV = 'production' cb() } - Robert Wildling

1
你也可以使用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 run-script" 的用例:
package.json :-
    "scripts": {
        "devbld": "gulp build --development",
        "prodbld": "gulp build --production",
      }

    $ npm run devbld
    $ npm run prodbld

-3
if (process.env.NODE_ENV === "production")
  // whatever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接