管道中未调用 `on("end")` 处理程序的原因通常是什么?"/>
在 Gulp 管道中未调用 `on("end")` 处理程序的原因通常是什么?
没有 MWE,我不希望有人会准确回答我的情况。我要问的是 generally 可能是什么原因。知道这一点,我会继续自己调查。
下面不是工作示例,但是如果基于 Gulp 简化我的标记源代码 linter 类(目前它有大约 750 行),它将是:
import type { TransformCallback } from "stream";
import Stream from "stream";
import VinylFile from "vinyl";
class MarkupSourceCodeLinter {
public static provideLintingIfMust(
projectBuildingMasterConfigRepresentative: ProjectBuildingMasterConfigRepresentative
): () => NodeJS.ReadWriteStream {
const dataHoldingSelfSoleInstance: MarkupSourceCodeLinter = new MarkupSourceCodeLinter(/* */);
// ...
/* First run */
return dataHoldingSelfSoleInstance.lint(dataHoldingSelfSoleInstance.targetFilesGlobSelectors);
}
protected lint(globSelectorsOrAbsolutePathsOfTargetFiles: Array<string>): () => NodeJS.ReadWriteStream {
return (): NodeJS.ReadWriteStream => Gulp.
src(globSelectorsOrAbsolutePathsOfTargetFiles, { read: false }).
// ...
pipe(new Stream.Transform({
objectMode: true,
transform(chunk: unknown, _encoding: BufferEncoding, callback: TransformCallback): void {
console.log("CHECKPOINT1");
if (chunk instanceof VinylFile) {
if (VinylFile.isVinyl(chunk)) {
console.log(chunk.path);
}
}
callback(null, chunk);
}
})).
on("end", (): void => {
console.log("CHECKPOINT2");
});
}
private onMarkupSourceFileHasBeenAddedOrUpdated(targetMarkupFileAbsolutePath: string): void {
//
this.lint([ targetMarkupFileAbsolutePath ])();
}
}
当
lint()
被外部调用时(通过public staticprovideLintingIfMust
),on("end", () => {})
处理程序被调用。
然而,当lint()
从onMarkupSourceFileHasBeenAddedOrUpdated
调用时,检查点console.log("CHECKPOINT1");
到达
通过 console.log("CHECKPOINT2");
- 没有。只有一个文件。
我想,我只是不知道
on("end", () => {})
什么时候被实际调用。
后续运行的示例输出:
CHECKPOINT1
D:\XXX\FunctionalTests\MarkupProcessing\IncrementalBuilding\01-Source\Com
ponents\Header.pug
恰好一个文件已被处理,但
on("end", () => {})
还没有被调用。
通常可能是什么原因?
回答如下:
更多推荐
在 Gulp 管道中未调用 `on("end")` 处理程序的原因通常是什么?
发布评论