1

我设置了两个任务。一个 webpack 任务和一个注入任务。

网页包:

gulp.task('webpack', (done) => {
  gulp.src('./src/app/app.module.js')
    .pipe(plugins.webpack({
      module: {
        loaders: [
          { test: /\.html$/, loaders: ["html"]},
          { test: /\.js$/, exclude: /(node_modules|bower_components)/, loaders: ['babel-loader']}
        ]
      }
    }))
    .pipe(gulp.dest('.tmp/scripts/'))
    done();
})

注入:

gulp.task('inject', ['webpack'], () => {
  var globalSources = gulp.src(['.tmp/scripts/*.js'], {read: false});
  return gulp.src('src/index.html')
    .pipe(plugins.plumber())
    .pipe(plugins.inject(globalSources, {
      addRootSlash: false,
      addPrefix: '.',
      ignorePath: '.tmp'
    }))
    .pipe(gulp.dest('.tmp/'));
})

我发现 webpack 任务会在将流文件放入 .tmp/scripts 文件夹之前说它已经完成。因此,当进行注入时,没有要注入的文件。

webpack-stream 是否输出了在 done() 之前使用的自己的回调?

4

1 回答 1

0

您在启动流后调用done()right,它可能看起来不同,因为您在流的末尾留下了分号并且缩进done()太多。你真正拥有的是:

gulp.task('webpack', (done) => {
  gulp.src('./src/app/app.module.js')
    .pipe(plugins.webpack(/* config */))
    .pipe(gulp.dest('.tmp/scripts/'));
  done();
})

您想要做的是在流中调用 done(在管道的末尾)。根据异步任务支持的文档,您可以使用它.on('end', callback)来实现这一点。所以完整的任务看起来像这样:

gulp.task('webpack', (done) => {
  gulp.src('./src/app/app.module.js')
    .pipe(plugins.webpack({
      module: {
        loaders: [
          { test: /\.html$/, loaders: ["html"]},
          { test: /\.js$/, exclude: /(node_modules|bower_components)/, loaders: ['babel-loader']}
        ]
      }
    }))
    .pipe(gulp.dest('.tmp/scripts/'))
    .on('end', done)
})
于 2017-03-15T17:10:54.167 回答