根据NODE_ENV设置吞吐任务

有没有办法根据设置的NODE_ENV指定一个吞咽任务?

例如在我的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吗? 还是有更好的方法来做到这一点?

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

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

然后,你将能够保持package.json的单个gulp命令,并像你说的那样使用它:

 NODE_ENV=production npm start 

NODE_ENVvariables的任何其他值都将启动development任务。


你当然可以做一个高级用法,使用一个允许多任务的对象,并避免if树下地狱:

 var tasks = { development: 'development', production: ['git', 'build', 'publish'], preprod: ['build:preprod', 'publish:preprod'], ... } gulp.task('default', tasks[process.env.NODE_ENV] || 'fallback') 

请记住,在提供一系列任务时,它们将并行运行。

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

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

另一个简单的方法可能是

 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

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