根据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_ENV
variables的任何其他值都将启动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 production
或gulp development
。
if (process.env.NODE_ENV === "production") // whatever