Gulp任务在生成输出文件之前完成

Anders Liu

----最重要的更新------

一些朋友指出,我应该从任务中返回流。没错,但无济于事。

实际上,在我的第一个版本中,我返回了流,而var rs零件曾经是return

问题是,任务完成会生成编译的js文件因此,无论我使用done回调还是从任务返回流,该任务确实已完成,并且下一个任务已启动,但是生成的文件尚未准备好。

----这是原始问题----

我有一个gulpfile.js,它首先将一堆.ts文件编译成js,然后将输出的js文件打包到webpack中。这是我的gulpfile.js的重要部分:

const gulp = require("gulp");
const ts = require("gulp-typescript");
const webpack = require("webpack-stream");

gulp.task("default", ["build"]);
gulp.task("build", ["compile", "pack"]);
gulp.task("compile", task_compile);
gulp.task("pack", ["compile"], task_pack);

function task_compile(done) {
    return util_compile_ts("main", done);
}

function task_pack(done) {
    return util_pack_js("main", done);
}

function util_compile_ts(proj, done) {
    const dirSrc = "src/" + proj;
    const dirCompiled = "out/compiled/" + proj;
    const dirBuilt = "out/built";

    var tscfg = require("./" + dirSrc + "/tsconfig.json").compilerOptions;
    var rs = gulp
        .src(dirSrc + "/**/*.ts")
        .pipe(ts(tscfg))
        .pipe(gulp.dest(dirCompiled))
        .on("end", done);
}

function util_pack_js(proj, done) {
    const dirSrc = "src/" + proj;
    const dirCompiled = "out/compiled/" + proj;
    const dirBuilt = "out/built";

    var wpcfg = require("./" + dirSrc + "/webpack.config.js");
    wpcfg.context = path.resolve(dirSrc, wpcfg.context)
    wpcfg.output.path = path.resolve(dirSrc, wpcfg.output.path)
    var rs = gulp
        .src(dirCompiled + "/**/*.js")
        .pipe(webpack(wpcfg))
        .pipe(gulp.dest(dirBuilt))
        .on("end", done);
}

如果我再跑gulp compile,那gulp pack没问题。但是当我只运行时gulp,就会发生错误:

Error: Entry module not found: Error: Cannot resolve 'file' or 'directory'

并且列出了已编译的js文件的路径,该路径本身还可以,但是尚未复制到该compiled文件夹中。

我观察了ts编译的过程,发现ts任务在实际生成输出文件之前完成。运行时gulp compile,gulp任务显示完成,并且1或2秒后,生成的文件出现在该compiled文件夹中。

因此,当我运行时gulppack任务将在compile任务完成后立即开始,那时js输出尚未在磁盘上准备好,因此该pack任务失败了,因为它找不到输入。

所以问题是,我如何等待已编译的js文件准备就绪并继续执行下一个任务?


PS我不想使用setTimeout进行硬编码的等待...。

谢谢,安德斯

比昂·索伦森(BjørnSørensen)

根据返回的流文档gulp-typescriptts不是您的JavaScript文件。它的组合.js.d.ts参考TypeScript示例,了解他们如何选择流中的JavaScript文件。

尝试通过选择JavaScript文件来更改流,并进一步返回流以让gulp为您处理完成的回调。

function util_compile_ts(proj, done) {
  const dirSrc = "src/" + proj;
  const dirCompiled = "out/compiled/" + proj;
  const dirBuilt = "out/built";

  var tscfg = require("./" + dirSrc + "/tsconfig.json").compilerOptions;
  return gulp
    .src(dirSrc + "/**/*.ts")
    .pipe(ts(tscfg))
    .js
    .pipe(gulp.dest(dirCompiled));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在生成的任务完成之前,不会调用taskSpawn()块

来自分类Dev

tar生成的输出文件

来自分类Dev

Gulp +源映射(多个输出文件)

来自分类Dev

Gulp +源映射(多个输出文件)

来自分类Dev

如何让 gulp 在完成之前不完成任务?

来自分类Dev

使用libav而不生成输出文件

来自分类Dev

使用MultiSinkTap生成多个输出文件

来自分类Dev

计算线路频率并生成输出文件

来自分类Dev

gulp构建不输出文件。我哪里做错了?

来自分类Dev

Gradle分发任务输出文件不在ZIP的根目录

来自分类Dev

在Gradle中为复制任务指定输出文件

来自分类Dev

Scrapy Spider完成后重命名输出文件

来自分类Dev

在ember构建完成后移动输出文件

来自分类Dev

gulp任务完成所有文件后运行代码

来自分类Dev

在GCC中编译而不生成输出文件

来自分类Dev

exsl:document-尝试生成输出文件

来自分类Dev

iozone为什么不生成输出文件?

来自分类Dev

Map Reduce作业生成空的输出文件

来自分类Dev

在Apache Spark的从属机器上生成输出文件

来自分类Dev

iozone为什么不生成输出文件?

来自分类Dev

如何从Sybase中的存储过程生成XML输出文件?

来自分类Dev

在Apache Spark中在从机上生成输出文件

来自分类Dev

webpack生成不必要的输出文件

来自分类Dev

AWK:生成两个不同 OFS 的输出文件

来自分类Dev

Gulp:如果源已被删除,如何使gulp自动删除输出文件?

来自分类Dev

使用cmd在任务完成之前读取和写入文件

来自分类Dev

Gradle C(本机)任务输出文件(在其他任务/项目中使用)

来自分类Dev

如何从 GradleBuild 任务的另一个 gradle 构建脚本的任务设置输出文件?

来自分类Dev

覆盖输出文件?

Related 相关文章

热门标签

归档