【问题标题】:Set gulp tasks depending on NODE_ENV根据 NODE_ENV 设置 gulp 任务
【发布时间】:2015-05-27 05:21:50
【问题描述】:

有没有办法根据设置的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吗?或者有更好的方法吗?

【问题讨论】:

  • 这些答案对您有帮助吗?如果您仍有问题,请投票并接受或发表评论。

标签: javascript node.js gulp


【解决方案1】:

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

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

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

NODE_ENV=production npm start

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


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

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 很高兴你喜欢它;)
【解决方案2】:

让您的第一个 gulp 任务根据 process.env.NODE_ENV 值运行其他 gulp 任务。

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

【讨论】:

    【解决方案3】:

    另一种简单的方法是

    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() }
    【解决方案4】:

    你也可以使用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
    

    【讨论】:

      【解决方案5】:
      if (process.env.NODE_ENV === "production")
        // whatever
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        相关资源
        最近更新 更多