尽管我返回了一个流,但信号异步完成错误
Signal async completion error although I returned a stream
我不明白我为什么会这样
Did you forget to signal async completion?
这是我的设置:
gulp.task('compile-ts', () => {
return tsProject.src(config.files.src.ts)
.pipe($.tap((file, t) => {
logVerbose('Compiling "' + file.path + "'");
}))
.pipe($.sourcemaps.init())
.pipe($.typescript(tsProject))
.pipe($.sourcemaps.write('./'))
.pipe($.chmod(755))
.pipe(gulp.dest(config.dist));
});
gulp.task('copy-assets', () => {
return gulp.src(config.files.src.css_html_js, { base: config.src })
.pipe($.tap((file, t) => {
logVerbose('Copying "' + getFileName(file.path) + "'");
}))
.pipe($.chmod(755))
.pipe(gulp.dest(config.dist));
});
gulp.task('browser-sync', (done) => {
browserSync.init({
"port": 3000,
"startPath": "dist/index.html",
"browser": "chrome",
"logLevel": "silent",
"server": {
"middleware": {
"0": null
}
}
}, done);
process.on('exit', () => {
browserSync.exit();
});
})
gulp.task('watch', gulp.parallel(() => {
gulp.watch(config.files.ts, gulp.series('compile-ts'));
}, () => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
}));
gulp.task('serve-dist', gulp.parallel('watch', 'browser-sync'));
根据堆栈跟踪,违规行是
gulp.watch(config.files.ts, gulp.series('compile-ts'));
在 watch
任务中。任务 compile-ts
正在运行,它 returns 是一个流,应该足以表示完成。但是为什么我还是会收到错误消息?
这是gulp@4.0.0-alpha.2
。
编辑:
正在将 watch
任务更改为
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
gulp.watch(config.files.ts, gulp.series('compile-ts'));
done();
});
我没有再收到任何错误,但任务在 4 毫秒内完成并且什么也没做。如果我删除 done
部分,我会再次遇到同样的错误。
EDIT2:我将任务进一步拆分以便能够查明问题所在,
gulp.task('watch-ts', () => {
return gulp.watch(config.files.ts, gulp.series('compile-ts'));
});
gulp.task('watch-assets', () => {
return gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
});
gulp.task('watch', gulp.parallel('watch-ts', 'watch-assets'));
现在 watch-ts
和 watch-assets
都给我那个错误信息。据我所知,其中一个 returns 是一个流。
你总是需要在组成任务的每个函数中发出异步完成信号。不仅仅是那些异步的。不仅仅是那些使用流的。如果您不在函数中返回流,您仍然需要以某种方式发出异步完成信号(通常通过调用回调)。
所以您的第一次编辑已经正确:
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
gulp.watch(config.files.ts, gulp.series('compile-ts'));
done();
});
在此处调用回调可确保 gulp 知道您的 watch
任务已成功完成。 "Completed successfully" 在这种情况下意味着你的任务已经启动了两个手表。即使在 watch
作业完成后,两只手表都将继续 运行。所以 watch
任务在 4 毫秒后终止这一事实没有错。
然而,启动监视 不会 自动触发侦听器功能的执行。您必须先修改其中一个被监视的文件。或者,您可以将 ignoreInitial
option 传递给 gulp.watch()
,这将在手表首次启动时触发:
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, {ignoreInitial:false}, gulp.series('copy-assets'));
gulp.watch(config.files.ts, {ignoreInitial:false}, gulp.series('compile-ts'));
done();
});
我不明白我为什么会这样
Did you forget to signal async completion?
这是我的设置:
gulp.task('compile-ts', () => {
return tsProject.src(config.files.src.ts)
.pipe($.tap((file, t) => {
logVerbose('Compiling "' + file.path + "'");
}))
.pipe($.sourcemaps.init())
.pipe($.typescript(tsProject))
.pipe($.sourcemaps.write('./'))
.pipe($.chmod(755))
.pipe(gulp.dest(config.dist));
});
gulp.task('copy-assets', () => {
return gulp.src(config.files.src.css_html_js, { base: config.src })
.pipe($.tap((file, t) => {
logVerbose('Copying "' + getFileName(file.path) + "'");
}))
.pipe($.chmod(755))
.pipe(gulp.dest(config.dist));
});
gulp.task('browser-sync', (done) => {
browserSync.init({
"port": 3000,
"startPath": "dist/index.html",
"browser": "chrome",
"logLevel": "silent",
"server": {
"middleware": {
"0": null
}
}
}, done);
process.on('exit', () => {
browserSync.exit();
});
})
gulp.task('watch', gulp.parallel(() => {
gulp.watch(config.files.ts, gulp.series('compile-ts'));
}, () => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
}));
gulp.task('serve-dist', gulp.parallel('watch', 'browser-sync'));
根据堆栈跟踪,违规行是
gulp.watch(config.files.ts, gulp.series('compile-ts'));
在 watch
任务中。任务 compile-ts
正在运行,它 returns 是一个流,应该足以表示完成。但是为什么我还是会收到错误消息?
这是gulp@4.0.0-alpha.2
。
编辑:
正在将 watch
任务更改为
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
gulp.watch(config.files.ts, gulp.series('compile-ts'));
done();
});
我没有再收到任何错误,但任务在 4 毫秒内完成并且什么也没做。如果我删除 done
部分,我会再次遇到同样的错误。
EDIT2:我将任务进一步拆分以便能够查明问题所在,
gulp.task('watch-ts', () => {
return gulp.watch(config.files.ts, gulp.series('compile-ts'));
});
gulp.task('watch-assets', () => {
return gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
});
gulp.task('watch', gulp.parallel('watch-ts', 'watch-assets'));
现在 watch-ts
和 watch-assets
都给我那个错误信息。据我所知,其中一个 returns 是一个流。
你总是需要在组成任务的每个函数中发出异步完成信号。不仅仅是那些异步的。不仅仅是那些使用流的。如果您不在函数中返回流,您仍然需要以某种方式发出异步完成信号(通常通过调用回调)。
所以您的第一次编辑已经正确:
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, gulp.series('copy-assets'));
gulp.watch(config.files.ts, gulp.series('compile-ts'));
done();
});
在此处调用回调可确保 gulp 知道您的 watch
任务已成功完成。 "Completed successfully" 在这种情况下意味着你的任务已经启动了两个手表。即使在 watch
作业完成后,两只手表都将继续 运行。所以 watch
任务在 4 毫秒后终止这一事实没有错。
然而,启动监视 不会 自动触发侦听器功能的执行。您必须先修改其中一个被监视的文件。或者,您可以将 ignoreInitial
option 传递给 gulp.watch()
,这将在手表首次启动时触发:
gulp.task('watch', (done) => {
gulp.watch(config.files.css_html_js, {ignoreInitial:false}, gulp.series('copy-assets'));
gulp.watch(config.files.ts, {ignoreInitial:false}, gulp.series('compile-ts'));
done();
});