【问题标题】:Setup gulp-sass to work like sass --watch设置 gulp-sass 像 sass --watch 一样工作
【发布时间】:2015-11-08 01:07:45
【问题描述】:

我正在尝试将项目迁移到 gulp-sass 工作流程。在线阅读了一些教程后,我设置了一个非常基本的 gulpfile:

var gulp = require('gulp'),
    sass = require('gulp-sass'),
    concat = require('gulp-concat');

gulp.task('styles', function() {
  return gulp.src('scss/*.scss')
    .pipe(sass({
      'sourcemap=none': true
    }))
    .pipe(gulp.dest('css/'))
});

gulp.task('watch', function() {
    gulp.watch('scss/**/*.scss', ['styles']);
});

我想从每个不以下划线开头的*.scss 文件生成一个*.css 文件。

我的问题:使用当前的 gulpfile,gulp 将检测 .scss 文件的更改并重建所有库,而不是仅构建受更改影响的库。

例如,我的项目中有 2 个库:

  • lib1,其中@imports 部分是p1p2
  • lib2,其中@imports 部分是p2p3

如果我编辑部分p1,我只想更新lib1

如果我编辑部分p3,我只想更新lib2

如果我编辑部分p2,我希望同时更新lib1lib2

当前设置会在我在任何 *.scss 源中进行的每次编辑时更新这两个库。

换句话说,我希望 gulp-sass 的行为方式与 sass --watch 相同。这可能吗?怎么样?

谢谢!

【问题讨论】:

    标签: css sass gulp


    【解决方案1】:

    目前您的目标是监视任务中的所有 scss 文件:

    gulp.watch('scss/**/*.scss', ['styles']);
    

    您可以将其缩小到子文件夹或特定文件。您可以将监视任务分解为 2 个部分,例如:

    gulp.watch('scss/p1/**/*.scss', ['stylesP1', 'stylesP2']);
    gulp.watch('scss/p2/**/*.scss', ['stylesP2', 'stylesP3']);
    

    然后创建2个样式任务来匹配:

    gulp.task('stylesP1', function() { /* Your task actions */ });
    gulp.task('stylesP2', function() { /* Your task actions */ });
    gulp.task('stylesP3', function() { /* Your task actions */ });
    

    【讨论】:

    • 按照您的建议,我必须为我想要制作的每个 css lib 创建额外的 gulp 任务。另一方面,sass --watch 足够聪明,可以理解@import 指令,并且只生成受编辑影响的文件。这就是我想要达到的目标。我想为每个*.scss 文件名生成一个*.css 样式表,它不以下划线开头,并且需要自动完成并且不需要更新所有其他未修改的库。
    • 也许是爆炸gulp.src(['!sass/_*.scss'])
    • 问题不在于匹配文件名,而在于 gulp 知道每个文件的依赖关系。当部分 p1 更新时,gulp 应该知道 lib1 依赖于该文件,而 lib2 不依赖。
    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 2015-03-20
    • 2014-10-18
    • 2015-05-16
    • 2014-11-02
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多