0

我只想编译.less已更改的文件,以加快我的调试/编码工作流程。

这是我的吞咽任务:

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 秒)。

4

1 回答 1

3

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文件。虽然您可以使用自定义比较器来完成这项工作,但它并不是开箱即用的。

你真正想要的是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'));
});
于 2016-05-09T16:13:48.027 回答