【发布时间】:2017-08-26 08:58:21
【问题描述】:
昨天我将 Gulp 升级到 4.0,以便在为我的项目编译样式时获得一些速度(它们变大了,现在在我的 Mac Pro 2016 上我需要等待 19 秒)
经过一番挖掘,我决定将 gulp-cached 和 gulp-remember 添加到我的构建中。
这是我当前的 gulpfile.js 样式:
var gulp = require('gulp'),
sass = require('gulp-sass'),
cached = require('gulp-cached'),
sourcemaps = require('gulp-sourcemaps'),
autoprefixer = require('gulp-autoprefixer'),
remember = require('gulp-remember'),
gs = gulp.series,
concat = require('gulp-concat'),
gp = gulp.parallel;
gulp.task('compile:styles', () => {
return gulp.src([
// Grab your custom scripts
'./assets/scss/**/*.scss'
])
.pipe(sourcemaps.init()) // Start Sourcemaps
.pipe(cached('sass'))
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions']
}))
.pipe(remember('sass'))
.pipe(sourcemaps.write('.')) // Creates sourcemaps for minified styles
.pipe(gulp.dest('./assets/css/'));
});
gulp.task('watch:styles', () => {
gulp.watch('./assets/scss/**/*.scss', gs('styles'))
.on('change', function (event) {
console.log("event happened:"+JSON.stringify(event));
if (event.type === 'deleted') {
//delete from gulp-remember cache
remember.forget('sass', event.path);
//delete from gulp-cached cache
delete cache.caches['sass'][event.path];
}
});
});
gulp.task('watch', gp(
'watch:styles'
));
我的问题是我的构建在第一次编译时运行良好,大约需要 3 秒,之后在我进行更改的地方,它可以看到我在哪个文件中进行了更改,并且它开始编译,但是输出文件里面没有变化。
当谈到 gulp-cached 和 gulp-remeber 时,我想我没有得到什么。但在文件末尾,您可以看到一个函数,一旦发生更改,该函数就会清除缓存。
你能看看我的代码吗?也许你会有一些建议。
干杯!
### 编辑 26.08我在寻找解决方案时遇到了以下帖子: http://blog.reactandbethankful.com/posts/2015/05/01/building-with-gulp-4-part-4-incremental-builds/
我用下面的代码进行了相应的处理(但效果和上面的例子一样):
// Grab our gulp packages
var gulp = require('gulp'),
sass = require('gulp-sass'),
sourcemaps = require('gulp-sourcemaps'),
autoprefixer = require('gulp-autoprefixer'),
gs = gulp.series,
gp = gulp.parallel,
cache = require('gulp-memory-cache');
gulp.task('compile:styles', () => {
return gulp.src('./assets/scss/**/*.scss', {since: cache.lastMtime('sass')})
.pipe(sourcemaps.init()) // Start Sourcemaps
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions']
}))
.pipe(cache('sass'))
.pipe(sourcemaps.write('.')) // Creates sourcemaps for minified styles
.pipe(gulp.dest('./assets/css/'));
});
gulp.task('watch:styles', () => {
gulp.watch('./assets/scss/**/*.scss', gs('compile:styles'))
.on('change', cache.update('sass'));
});
gulp.task('build', gs(
'compile:styles',
'watch:styles'
));
【问题讨论】:
-
经过更多挖掘后,我发现如果我在包含所有导入的主文件中进行更改,编译就可以工作,但是当我在导入的文件中进行更改时,没有任何反应
标签: javascript gulp gulp-watch gulp-sass incremental-build