首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改口而不起作用

改口而不起作用
EN

Stack Overflow用户
提问于 2015-05-28 08:29:33
回答 1查看 3.3K关注 0票数 3

我以前用过用JS改变的gulp,没有问题。但是,现在我试图在我的gulp-changed文件上使用gulp-newergulp-newer,而不检测哪个文件已经更改。

代码语言:javascript
复制
var changed    = require('gulp-changed');
var newer = require('gulp-newer');
var SRC = './stylesheets/**/*.scss';
var DEST = './stylesheets';

gulp.task('sass', function () {   
    return gulp.src(SRC)
        .pipe(changed(DEST)) //tried newer here as well 
        .pipe(sass())
        .pipe(gulp.dest(DEST))
});

当更改scss文件时,它将输出,但没有更改任何scss

代码语言:javascript
复制
[BS] Watching files...
[09:26:13] Starting 'sass'...
[09:26:14] Finished 'sass' after 180 ms

Watch

代码语言:javascript
复制
gulp.task('watch', ['setWatch', 'browserSync'], function () {
    gulp.watch('./stylesheets/**/*.scss', ['sass']);
});

预期的输出文件存在,自昨天以来一直没有更改。

如何使scss只编译已更改的文件。

EN

回答 1

Stack Overflow用户

发布于 2015-08-05 23:49:11

这在过去的几天里一直困扰着我,我想我找到了另一个解决方案。我在上面看到你让它起作用了,但我想我还是和别人分享吧,以防它对别人有帮助。

它需要gulp-cached (我已经在使用它,但也无法让gulp-changedgulp-newer工作)。最初,我在编译管道的开头尝试了缓存,比如changed|newer (应该如何?)工作,但也失败了。过了一分钟,我意识到我明显的错误:在所有处理和输出文件都准备好写入目标目录之后,缓存操作就必须发生,但就在此之前。

因此:

代码语言:javascript
复制
gulp.watch('path/to/**/*.scss')
    .pipe(sass())
    <<... rename, minify, etc ...>>
    .pipe(cached('sass_compile'))
    .pipe(gulp.dest('path/to/dest/'));

就这样。当Gulp进程启动时,缓存是空的,因此所有Sass文件都被编译,它们的编译版本(CSS)被添加到缓存中,然后写入磁盘。

然后,当您编辑和保存SCSS文件时,Sass将再次重新编译与src glob匹配的所有内容,但是如果内容匹配(缓存命中),那么SCSS中只更改了空格或格式,对gulp.dest的调用就不会发生。如果缓存中的版本不同(误),则将内容写入磁盘。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30501152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档