我有两个任务.
萨斯:
gulp.task('sass', function() {
gulp.src('src/sass/**.{scss, sass}')
.pipe(sourcemaps.init())
.pipe(sass({outputStyle: 'compressed'}))
.on('error', handleErrors)
.pipe(autoprefixer())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/css'))
.pipe(browserSync.reload({stream: true}))
});
和CSS优化任务:
gulp.task('cssopt', ['sass'], function() {
gulp.src('dist/css/style.css')
.pipe(uncss({html: ['http://example.dev//']}))
.pipe(cmq({log: true}))
.pipe(shrink())
.pipe(rename({suffix: '.opt'}))
.pipe(gulp.dest('dist/css'))
});
cssopt任务依赖于sass任务,因为它使用的是sass生成的style.css文件.但是它不起作用,找不到style.css文件,因为它不存在.如果我先单独运行sass,则cssopt作品会导致style.css在那.
从文档(重点是我的):
An array of tasks to be executed and completed before your task will run.
文件也说:
Note: Are your tasks running before the dependencies are complete? Make sure your dependency tasks are correctly using the async run hints: take in a callback or return a promise or event stream.
我不太了解:“异步运行提示” …“ …
我试着做一个干净的任务,作为无礼的部门,尽管效果很好.
我可以将它们粉碎成一个任务,但是cssopt花费的时间很长(当您给它指定URL时uncss相当慢),而且无论如何我只需要在生产中使用style.opt.css文件.
我正在使用最新版本(1.3.3)的gulp-sass.
解决方法:
“async run hints”… wat…
您需要向gulp系统暗示您的任务是异步的.您可以通过在任务函数中使用回调参数或返回事件流或Promise来实现.那就是您缺少的任务,它们当前返回未定义的状态,因此gulp希望它们立即完成.尝试
gulp.task('sass', function() {
return gulp.src('src/sass/**.{scss, sass}').…