Build 组合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.

因此,我有以下与安装和复制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.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这正是我想要的,谢谢。