我想只编译已更改的.less
个文件,以加快我的调试/编码工作流程。
这是我的gulp任务:
gulp.src('core/**/*.less')
.pipe(changed('core'))
.pipe(less().on('error', handleError))
.pipe(autoprefixer('last 2 version'))
.pipe(remember())
.pipe(concat('main.min.css'))
.pipe(gulp.dest('core'))
.on('end', resolve)
.on('error', reject);
我使用gulp-changed
并且因为它最初没有工作,我也尝试使用gulp-remember
,但没有效果。手表工作,它编写速度超快,但它根本没有效果。
如果我删除了changed('core')
和remember()
,它会有效,但速度会慢一些(大约16秒)。
答案 0 :(得分:1)
gulp-changed
不适合您的用例,因为它用于将输入文件与磁盘上的输出文件进行比较。
假设您有一个输入文件core/foo/bar.less
,您可以通过changed('dist')
。这样做是为了寻找输出文件dist/foo/bar.less
。如果输入文件比输出文件新,则传递它。否则会被过滤掉。
这意味着使用changed('core')
无法正常工作。它将输入文件core/foo/bar.less
与输出文件core/foo/bar.less
进行比较。 但他们是同一个文件。这意味着输入文件永远不会比输出文件更新,并且永远不会通过。
还有另一个问题。您没有为每个输入文件提供一个输出文件。您的所有.less
个文件都会编译为一个 main.min.css
文件。虽然您可以使用custom comparator来完成这项工作,但它并不是开箱即用的。
你真正想要的是gulp-cached
。它不是将每个输入文件与磁盘上的输出文件进行比较,而是将每个输入文件与已缓存在内存中的同一文件的先前版本进行比较。
var cached = require('gulp-cached');
gulp.task('css', function() {
return gulp.src('core/**/*.less')
.pipe(cached('less'))
.pipe(less())
.pipe(autoprefixer('last 2 version'))
.pipe(remember('less'))
.pipe(concat('main.min.css'))
.pipe(gulp.dest('core'));
});