【问题标题】:gulp compile all parent sass files when a dependent/child (@import) is changed当依赖/子(@import)更改时,gulp 编译所有父 sass 文件
【发布时间】:2014-08-06 22:12:46
【问题描述】:

我有一个相当大的代码库,其中包含多个共享通用 sass 模块的项目。

我还为每个运行多个任务的模块设置了相当复杂的 gulpfile。

我遇到的一个问题是,当单个共享 sass 模块更新时,能够在多个项目上运行 sass 任务。

例如:

Project 1 file.scss
   @import "shared-child.scss"

Project 2 file.scss
   @import "shared-child.scss"

Project 3 file.scss
       @import "shared-child.scss"

这种情况经常发生。当我更新 shared-child.scss 时,我希望重新编译所有包含 shared-child.scss 的项目文件。

因此,当我在 shared-child.scss 上运行 gulp sass 任务时,它会依次知道它在各个项目中的位置(即项目 1、项目 2、项目 3)并运行他们适当的 gulp 任务包括对 shared-child.scss 所做的更改。

正确的是,我在项目 gulp 中有父文件。监视所有包含的文件以进行更改,但反之亦然是问题所在。更新孩子并让父母重新编译。

任何关于如何实现这一点的信息都将不胜感激。

【问题讨论】:

    标签: sass gulp gulp-sass


    【解决方案1】:

    不完全是您想要的,但我使用它来避免部分/包含/子项被单独解析。

    var gulp = require('gulp');
    var filter = require('gulp-filter');
    var sass = require('gulp-sass');
    
    gulp.task('styles', function () {
        return gulp.src('app/css/**/*.scss')
            .pipe(filter(noPartials))//avoid compiling SCSS partials
            .pipe(sass())
            .pipe(gulp.dest('dist'));
    });
    

    您应该查看所有文件,包括部分文件,以便在它们更改时触发任务。

    gulp.task('watch', function() {
      gulp.watch('app/css/**/*.scss', ['styles']); //watch ALL the SCSS files
    });
    

    部分由文件名开头的_ 识别或包含文件夹的名称。

    var noPartials = function (file) {
        var path         = require('path');
        var dirSeparator = path.sep.replace('\\', '\\\\');
        var relativePath = path.relative(process.cwd(), file.path);
        return !new RegExp('(^|'+dirSeparator+')_').test(relativePath);
    };
    

    唯一的缺点是所有非部分文件将在任何 SCSS文件更改时呈现。


    附带说明:I made exactly what you asked,但对于 Jade(html 模板语言),使用了一个插件来计算依赖关系树/图。所以这是可能的,如果有人找到一种方法来为 SASS 文件构建该树

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2014-07-04
      相关资源
      最近更新 更多