【问题标题】:Issues running async tasks in Gulp在 Gulp 中运行异步任务的问题
【发布时间】:2020-11-07 06:13:36
【问题描述】:

我对 Node.js 项目的经验很少,并且继承了一个使用 Gulp 构建和分发自身的项目。

该项目有几个不同的任务文件,以及一个引用它们的gulpfile.js。为简洁起见,我以最小的函数为例。

//gulpfile.js
...
gulp.task('csscompile', function() {        
  gulp.src('./src/ops/gulp/csscompile.js')
});
...


//csscompile.js
...
module.exports = function (gulp) {

  gulp.task('csscompile', function (done) {

    let paths = [
      'src/app/**/*.scss',
      'node_modules/angular-material/angular-material.scss',
    ];

    gulp.src(paths)
      .pipe(sass())
      .pipe(concat('app.css'))
      .pipe(gulp.dest('build'))
      .done();
  });
};

从命令行运行 $ gulp csscompile 总是在大约 10 毫秒内完成整个函数,我得到如下输出:

[10:44:43] The following tasks did not complete: csscompile
[10:44:43] Did you forget to signal async completion?

显然等待函数完成存在问题。在四处搜索之后,我尝试了使用async 标志、使用function (done) 等所有可以想象的组合,但无济于事。即使将csscompile 函数直接放在csscompile 任务中也不起作用。

我认为使用gulp.src() 是问题的一部分,我不知道这些函数是内联的还是什么。我还想避免将这些函数中的每一个都变成Promise

有人对我可以做出的改变有什么建议吗?

【问题讨论】:

  • 您是否也在gulp.task('csscompile', function() { return gulp.src('./src/ops/gulp/csscompile.js') }); 函数中添加了返回值?这可能是问题所在。

标签: node.js gulp


【解决方案1】:

根据docs

当您看到“您是否忘记发出异步完成信号?”警告,没有使用上述任何技术。您需要使用错误优先回调或返回流、承诺、事件发射器、子进程或可观察对象来解决问题。

所以你需要返回流。

这应该可行:

module.exports = function (gulp) {

  gulp.task('csscompile', function () {

    let paths = [
      'src/app/**/*.scss',
      'node_modules/angular-material/angular-material.scss',
    ];

    return gulp.src(paths)
      .pipe(sass())
      .pipe(concat('app.css'))
      .pipe(gulp.dest('build'));
  });

【讨论】:

  • 感谢您的链接。我已经尝试了您的建议以返回流,但我仍然得到“你忘了...?”信息。我在gulpfile.js 中定义任务的方式有问题吗?
  • 是的。目前,这是一条无路可走的道路。让我谷歌一下。
  • 你使用的是什么版本的 gulp?
  • v4.0.2。据我所知,这一切都是在 ~v3.9 中构建的。
  • Gulp 3 和 4 之间存在需要更改的重大更改:joezimjs.com/javascript/complete-guide-upgrading-gulp-4 您必须使用 Gulp 3 或重写才能使用 Gulp 4。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多