在Gulp中,任务通常是这样的:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
是否有可能将命令行标志传递给gulp(这不是一个任务),并让它在此基础上有条件地运行任务?例如
$ gulp my-task -a 1
然后在gulpfile.js中:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
Edit
Gulp-util已弃用,应该避免使用,因此建议使用minimist, Gulp-util已经使用了minimist。
所以我改变了gulpfile中的一些行来删除gulp-util:
var argv = require('minimist')(process.argv.slice(2));
gulp.task('styles', function() {
return gulp.src(['src/styles/' + (argv.theme || 'main') + '.scss'])
…
});
原始
在我的项目中,我使用以下标志:
gulp styles --theme literature
Gulp提供了一个对象。环境。它在新版本中已弃用,因此必须使用gulp-util。任务如下所示:
var util = require('gulp-util');
gulp.task('styles', function() {
return gulp.src(['src/styles/' + (util.env.theme ? util.env.theme : 'main') + '.scss'])
.pipe(compass({
config_file: './config.rb',
sass : 'src/styles',
css : 'dist/styles',
style : 'expanded'
}))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'ff 17', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(livereload(server))
.pipe(gulp.dest('dist/styles'))
.pipe(notify({ message: 'Styles task complete' }));
});
环境设置在所有子任务期间可用。所以我也可以在监视任务上使用这个标志:
gulp watch --theme literature
我的样式任务也可以工作。
嗨
拉尔夫
Edit
Gulp-util已弃用,应该避免使用,因此建议使用minimist, Gulp-util已经使用了minimist。
所以我改变了gulpfile中的一些行来删除gulp-util:
var argv = require('minimist')(process.argv.slice(2));
gulp.task('styles', function() {
return gulp.src(['src/styles/' + (argv.theme || 'main') + '.scss'])
…
});
原始
在我的项目中,我使用以下标志:
gulp styles --theme literature
Gulp提供了一个对象。环境。它在新版本中已弃用,因此必须使用gulp-util。任务如下所示:
var util = require('gulp-util');
gulp.task('styles', function() {
return gulp.src(['src/styles/' + (util.env.theme ? util.env.theme : 'main') + '.scss'])
.pipe(compass({
config_file: './config.rb',
sass : 'src/styles',
css : 'dist/styles',
style : 'expanded'
}))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'ff 17', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(livereload(server))
.pipe(gulp.dest('dist/styles'))
.pipe(notify({ message: 'Styles task complete' }));
});
环境设置在所有子任务期间可用。所以我也可以在监视任务上使用这个标志:
gulp watch --theme literature
我的样式任务也可以工作。
嗨
拉尔夫
有一种非常简单的方法可以在不解析参数的情况下实现开/关标志。Gulpfile.js只是一个像其他文件一样执行的文件,所以你可以这样做:
var flags = {
production: false
};
gulp.task('production', function () {
flags.production = true;
});
并使用类似gulp-if的命令有条件地执行一个步骤
gulp.task('build', function () {
gulp.src('*.html')
.pipe(gulp_if(flags.production, minify_html()))
.pipe(gulp.dest('build/'));
});
执行gulp构建将生成一个漂亮的html,而gulp生产构建将缩小它。
这个问题发布已经有一段时间了,但也许它会帮助到一些人。
我正在使用GULP CLI 2.0.1(全局安装)和GULP 4.0.0(本地安装),这里是如何在没有任何额外插件的情况下做到这一点。我认为代码是不言自明的。
var cp = require('child_process'),
{ src, dest, series, parallel, watch } = require('gulp');
// == availableTasks: log available tasks to console
function availableTasks(done) {
var command = 'gulp --tasks-simple';
if (process.argv.indexOf('--verbose') > -1) {
command = 'gulp --tasks';
}
cp.exec(command, function(err, stdout, stderr) {
done(console.log('Available tasks are:\n' + stdout));
});
}
availableTasks.displayName = 'tasks';
availableTasks.description = 'Log available tasks to console as plain text list.';
availableTasks.flags = {
'--verbose': 'Display tasks dependency tree instead of plain text list.'
};
exports.availableTasks = availableTasks;
从控制台运行:
gulp availableTasks
然后运行并查看差异:
gulp availableTasks --verbose
如果你正在使用typescript (gulpfile.ts),那么在yargs(基于@Caio Cunha的精彩回答https://stackoverflow.com/a/23038290/1019307和上面的其他评论)中这样做:
安装
npm install --save-dev yargs
typings install dt~yargs --global --save
.ts文件
把这个添加到.ts文件中:
import { argv } from 'yargs';
...
let debug: boolean = argv.debug;
这必须在每个.ts文件中单独完成(即使是导入到gulpfile.ts/js中的工具/任务/项目文件)。
Run
gulp build.dev --debug
或者在npm下将arg传递给gulp:
npm run build.dev -- --debug
Gulp没有为此提供任何类型的util,但您可以使用众多命令参数解析器中的一个。我喜欢码。应该是:
var argv = require('yargs').argv;
gulp.task('my-task', function() {
return gulp.src(argv.a == 1 ? options.SCSS_SOURCE : options.OTHER_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
你也可以将它与gulp-if结合起来,有条件地管道流,对于开发vs. prod构建非常有用:
var argv = require('yargs').argv,
gulpif = require('gulp-if'),
rename = require('gulp-rename'),
uglify = require('gulp-uglify');
gulp.task('my-js-task', function() {
gulp.src('src/**/*.js')
.pipe(concat('out.js'))
.pipe(gulpif(argv.production, uglify()))
.pipe(gulpif(argv.production, rename({suffix: '.min'})))
.pipe(gulp.dest('dist/'));
});
然后调用gulp my-js-task或者gulp my-js-task——production。