【发布时间】:2017-04-12 06:13:36
【问题描述】:
但是,我遇到了一个问题,即运行我的 gulp watch 任务会破坏我的构建;这只发生在我编辑 .scss 文件并且 gulp 检测到更改时。
例如,样式已正确应用于我网站上的特定文档。我通过调用 gulp 开始观察我的资产。我运行gulp 来调用默认任务(它可以正确构建所有内容,连接我的资产等)
这不会破坏我的生产文件。直到我编辑文件(并且 gulp 检测到并再次运行必要的任务)才会发生这种情况。
这是我的 gulpfile
//Node dependencies
var gulp = require('gulp'),
minifyCSS = require('gulp-clean-css'),
minifyJS = require('gulp-uglify'),
rename = require('gulp-rename'),
sass = require('gulp-sass'),
pump = require('pump'),
sync = require('run-sequence');
//Sass transpilation task
gulp.task('sass', function(cb) {
pump([
gulp.src('app/scss/*.scss'),
sass(),
gulp.dest('app/css')
], cb);
});
//Uglify CSS task
gulp.task('ugCSS', function(cb) {
pump([
gulp.src('app/css/*.css'),
minifyCSS(),
rename({
suffix: ".min"
}),
gulp.dest('dist/css')
], cb);
});
//Uglify JS task
gulp.task('ugJS', function(cb) {
pump([
gulp.src('app/js/*.js'),
minifyJS(),
rename({
suffix: ".min"
}),
gulp.dest('dist/js')
], cb);
});
//Watch task
gulp.task('watch', function() {
return gulp.watch('app/scss/*.scss', ['default']);
});
//Default task to make sure everythings runs syncronously
gulp.task('default', function(callback) {
sync('sass', 'ugCSS', 'ugJS', 'watch', callback);
});
如果我说的没有道理,我会系统地列出我是如何调用这个问题的。
- gulp:这会运行默认任务(这不会破坏样式)
- 在 ide 中编辑 .scss 文件:我想更改我的样式,所以我编辑了文件,gulp watch 任务检测到这一点并再次返回“默认”任务,重新开始循环再次。
- 打开浏览器并导航到站点以查看应用的样式:这是它中断的地方,我的所有样式都已删除,我的 css 的 'gulp.dest' 文件(我已经 uglified 并通过了到分发文件夹)是空白的。
- gulp:取消之前的 gulp 进程并再次运行它可以解决问题。导航回 /dist 中的 css 文件 - 所有样式都在那里。
长话短说,只有当我“主动”编辑.scss 文件并且 gulp watch 任务调用必要的任务将文件构建到生产文件夹中时,我的样式才会被删除,因此相关文档可以看到这些更改。
【问题讨论】:
-
代替手表中的“默认”任务进行测试并仅运行“sass”作业以查看是否正确编译样式
-
试过了,同样的事情。如果我像在 gulp sass 中那样自行运行 sass 任务 - 效果很好。如果我运行 watch 任务并且 watch 任务检测到更改然后运行 sass 任务,那就是它中断的地方。
-
我面临着类似的情况,我认为问题在于任务没有按顺序完成。很确定 'ugCSS' 在 'sass' 完成工作之前运行。
-
嗯,这就是我包含“runSequence”模块的原因,所以我可以指定任务执行的顺序。看着 gulp 输出“开始和完成”的任务——它似乎以正确的顺序运行。
-
我建议您不要在手表上调用默认值,因为默认值会启动手表,并且当您进行更改时会重复调用它。相反,只需列出您想要的任务,即。 ['sass','ugcss',等等..]。只是一个简短的说明,以使 gulp 中的写作不易出错。此外,我建议您在所有 gulp 任务中使用 gulp-plumber,这样您的流就不会因错误而中断。快速说明:您不需要在每个任务中包含函数(cb)并返回cb,您只需要使用运行序列,其他任务可以只是函数()。最佳
标签: javascript html css gulp gulp-watch