Build 组合GulpJS任务
因此,我有以下与安装和复制bower文件相关的GulpJS任务:Build 组合GulpJS任务,build,gulp,Build,Gulp,因此,我有以下与安装和复制bower文件相关的GulpJS任务: gulp.task('bower-install', function() { var command = 'bower install'; gutil.log(gutil.colors.cyan('running command:'), command); return gulp.src('', {read: false}) .pipe(shell([ command ])); }); gulp.
gulp.task('bower-install', function() {
var command = 'bower install';
gutil.log(gutil.colors.cyan('running command:'), command);
return gulp.src('', {read: false})
.pipe(shell([
command
]));
});
gulp.task('bower-copy', function() {
return gulp.src(gulpConfig.bowerCopy.map(function(item) {
return './bower_components/' + item;
}), {base: './bower_components'})
.pipe(gulp.dest('./htdocs/components'));
});
gulp.task('bower-copy-clean', function() {
return gulp.src('./bower_components')
.pipe(clean());
});
gulp.task('bower-clean', function() {
return gulp.src('./htdocs/components')
.pipe(clean());
});
gulp.task('bower', 'Download and move bower packages', function(done) {
runSequence(
'bower-install',
'bower-clean',
'bower-copy',
'bower-copy-clean',
done
);
});
我这样做是因为我需要这些任务依次运行。当我运行gulp-bower
时,一切都按预期工作,我希望构造此代码,以便唯一公开的任务是bower
,因为所有bower-*
都没有意义自行运行
有没有办法写下这段代码,让所有的
bower-*
任务一个接一个地运行,而只公开bower
任务?因为gulpfile只是一个常规的节点应用程序,通常当我们陷入这样的困境时,最好问一下“如果没有gulp,我们会怎么做?”
var async = require('async');
var del = require('del');
var spawn = require('child_process').spawn;
function bowerInstall(cb) {
var command = 'bower install';
gutil.log(gutil.colors.cyan('running command:'), command);
var childProcess = spawn('bower', ['install'], {
cwd: process.cwd(),
stdio: 'inherit'
}).on('close', cb);
});
function bowerCopy(cb) {
gulp.src(gulpConfig.bowerCopy.map(function(item) {
return './bower_components/' + item;
}), {base: './bower_components'})
.pipe(gulp.dest('./htdocs/components'))
.on('end', cb);
});
function bowerCopyClean(cb) {
del('./bower_components', cb);
});
function bowerClean() {
del('./htdocs/components', cb);
});
gulp.task('bower', 'Download and move bower packages', function(done) {
async.series([
bowerInstall,
bowerClean,
bowerCopy,
bowerCopyClean
], done);
});
请注意,我没有将所有bower_组件和htdocs/components目录全部读取到ram中,这也大大加快了构建速度。这可以正常工作,但是当我使用gulp shell时,它会将命令的输出输出输出到屏幕上,这在exec中可能吗?是的,exec的回调实际上是
函数(err,stdout,stderr){
所以您只需要console.log(stdout)
和console.log(stderr)
。实际上,我更新了您的代码,使用spawn
而不是exec
。使用spawn
而不是exec
可以在使用exec
的回调时将子进程的输出蒸汽化,但这样做并不理想。您提到的所有其他内容都是e这正是我想要的,谢谢。