结合GulpJS任务

时间:2014-07-12 22:40:46

标签: build gulp

所以我有以下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任务?

1 个答案:

答案 0 :(得分:2)

因为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_components和htdocs / components目录读入ram来加速构建。