下面是我的gulpfile的片段,基本上我遇到的问题是,只要从CLI执行'gulp',open就不会总是打开一个新的浏览器窗口。例如,如果我删除生成的'dist'文件夹并执行'gulp',那么'dist'将支持.html文件和资产结构,但它将无法在我的浏览器窗口中打开该网站...
如果我然后取消当前正在运行的gulp任务并再次从CLI执行它(使用'dist'文件夹),那么gulp将在新的浏览器窗口中加载该网站。
如何设置打开以便每次都执行它?我认为它在某种程度上与'干净'任务发生冲突,但我不太确定。
任何帮助都将不胜感激。
清理任务:
gulp.task('clean', function() {
gulp.src(['./dist/**/*.*'], { read: true })
.pipe(clean())
});
打开任务:
gulp.task('open', function() {
gulp.src(config.startpage)
.pipe(open(config.startpage, { url: 'http://localhost:'+config.http_port }));
});
默认任务:
gulp.task('default', ['html', 'scripts', 'styles', 'images', 'open', 'clean'], function() {
server.listen(config.livereload_port);
http.createServer(ecstatic({ root: 'dist/' } )).listen(config.http_port);
// gutil.log(gutil.colors.yellow('HTTP Server running on port:'), gutil.colors.red(config.http_port));
gulp.watch(config.src_sass, ['styles'])._watcher.on('all', livereload);
gulp.watch(config.src_js, ['scripts'])._watcher.on('all', livereload);
gulp.watch(config.src_html, ['html'])._watcher.on('all', livereload);
});
* Config.start_page指向dist / index.html
答案 0 :(得分:2)
您有两个相关问题:
您需要在任务中返回流,否则gulp将无法知道它们已完成。如果你没有return a stream, return a promise, or use the callback function,gulp假定任务是同步的。
这很重要,因为它完全打破了任务依赖性。 gulp调用任务,看到它是同步的,然后立即启动下一个任务。
只需将您的任务更改为:
gulp.task('clean', function() {
return gulp.src(['./dist/**/*.*'], { read: true })
.pipe(clean())
});
gulp目前无法按指定的顺序运行非依赖任务。在default
任务中,这些依赖项都将同时运行,除非它们相互依赖。
由于我怀疑你想强制clean
任务每次运行 你运行其他任务,另一种解决方案是使用3rd party library to run tasks in sequence。 (这是我的库,用来解决这个完全问题。)最后,希望他们能够有办法解决这个问题。
注意:您仍然需要解决run-sequence
问题1才能正常工作。