在 CSS 缩小后吞噬同步内联 CSS
Gulp synchronous inlining CSS after CSS minification
我在使用 Gulp 内联缩小的 CSS 时遇到问题。
这是我的gulpfile.js:
var gulp = require('gulp'),
runSequence = require('run-sequence'),
$ = require('gulp-load-plugins')(),
browserSync = require('browser-sync'),
del = require('del');
gulp.task('clean', function(){
del(['build/**'])
});
/* Minifying CSS */
gulp.task('css', function(){
gulp.src('./css/*.css')
.pipe($.minifyCss())
.pipe(gulp.dest('./build/css'))
.pipe(browserSync.reload({stream: true}));
gulp.src('./views/css/*.css')
.pipe($.minifyCss())
.pipe(gulp.dest('./build/views/css'))
.pipe(browserSync.reload({stream: true}));
});
/* Inline CSS and Minify HTML */
gulp.task('inline-and-minify', function(){
gulp.src('./*.html')
.pipe($.smoosher({
base: './build'
}))
.pipe($.minifyHtml())
.pipe(gulp.dest('./build'))
.pipe(browserSync.reload({stream: true}));
gulp.src('./views/*.html')
.pipe($.smoosher({
base: './build/views'
}))
.pipe($.minifyHtml())
.pipe(gulp.dest('./build/views'))
.pipe(browserSync.reload({stream: true}))
});
/* Task Bundles, runs tasks one after the other (instead of in parallel) */
gulp.task('build-html', function(callback){
runSequence('clean', 'css', 'inline-and-minify');
});
gulp.task('default', ['build-html']);
我得到以下输出:
events.js:72
throw er; // Unhandled 'error' event
^
Error: ENOENT, open 'build/css/style.css'
在我看来,缩小的 css 文件在内联和缩小任务运行时没有关闭。
我尝试了这个,包括任务之间的超时 2 秒,这似乎可以解决问题:
gulp.task('build-html', function(callback){
runSequence('clean', 'css');
setTimeout(function(){
gulp.run('inline-and-minify');
}, 2000);
});
这似乎有点脆弱,加上gulp.run已被弃用。有没有更好的方法?
您需要回拨 gulp 以让它知道您的任务已完成。您可以通过返回流来执行此操作,也可以在任务函数中传递回调参数并调用该参数。我推荐前一种方法,使用合并流,因为您的 gulp 任务中有多个流。
var gulp = require('gulp'),
runSequence = require('run-sequence'),
$ = require('gulp-load-plugins')(),
browserSync = require('browser-sync'),
merge = require('merge-stream'),
del = require('del');
gulp.task('clean', function(cb) {
del(['build/**'], cb);
});
/* Minifying CSS */
gulp.task('css', function() {
var css1 = gulp.src('./css/*.css')
.pipe($.minifyCss())
.pipe(gulp.dest('./build/css'))
.pipe(browserSync.reload({stream: true}));
var css2 = gulp.src('./views/css/*.css')
.pipe($.minifyCss())
.pipe(gulp.dest('./build/views/css'))
.pipe(browserSync.reload({stream: true}));
return merge(css1, css2);
});
/* Inline CSS and Minify HTML */
gulp.task('inline-and-minify', function() {
var html1 = gulp.src('./*.html')
.pipe($.smoosher({
base: './build'
}))
.pipe($.minifyHtml())
.pipe(gulp.dest('./build'))
.pipe(browserSync.reload({stream: true}));
var html2 = gulp.src('./views/*.html')
.pipe($.smoosher({
base: './build/views'
}))
.pipe($.minifyHtml())
.pipe(gulp.dest('./build/views'))
.pipe(browserSync.reload({stream: true}));
return merge(html1, html2);
});
/* Task Bundles, runs tasks one after the other (instead of in parallel) */
gulp.task('build-html', function(callback) {
runSequence('clean', 'css', 'inline-and-minify');
});
gulp.task('default', ['build-html']);
相关文章:
- CSS-如何定位内容数据标题
- 窗口大小html css
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 动画.CSS重播
- 有没有一种方法可以防止img get请求使用css或js发生
- CSS表格:从列平移到整个表格宽度
- 在控制器和数据对象之间同步数据
- CKEditor-我在editor.css中的风格是't
- 单击更改图标并通过javascript添加一个css类
- 同步调用,直到用户通过angular验证为访问者
- 在 CSS 缩小后吞噬同步内联 CSS
- 我的css动画和JQuery没有同步
- javascript和css的时间同步吗?
- 是否有一个JavaScript/css的方法,使同步滚动区域类似于"meld"
- Css更改不能与同步ajax调用一起工作
- 如何使jquery的CSS操作同步(即没有回调)
- Gulp和浏览器同步404在所有外部的js和css文件
- 同步css关键帧动画与jQuery setInterval
- Gulp sass和浏览器同步重新加载浏览器而不是注入css
- 通过JavaScript事件同步两个CSS属性