根据 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 production
或 gulp 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
有没有办法根据设置的 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 production
或 gulp 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