首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gulp:编辑导入的SCSS文件时,仅编译更改的文件和编译父级文件

Gulp:编辑导入的SCSS文件时,仅编译更改的文件和编译父级文件
EN

Stack Overflow用户
提问于 2016-11-12 02:33:14
回答 1查看 825关注 0票数 3

在工作中,我们常常使用Ruby来编译SCSS。我在PhpStorm中将Ruby编译器设置为文件观察器,当我编辑由另一个文件导入的部分时,对应于祖先文件的CSS文件被更新,没有任何麻烦。

我想让Gulp和Libsass以同样的方式工作。我见过的大多数解决方案都只是在单个文件发生变化时编译项目中的所有SCSS文件,但我们的项目有太多的SCSS文件,无法成为可接受的解决方案。

gulp cached似乎是这个问题的一个很好的解决方案。但是当我使用gulp-cached时,CSS输出文件在我编辑partials时不会改变,只会改变它们的祖先SCSS文件。

我见过一些SCSS依赖图解决方案,但我不能让它们正常工作,或者它们根本不能满足我的需要。我尝试过gulp sass-graph、gulp-sass-inheritance和gulp-sass-partials imported。

这是我的吞咽文件

代码语言:javascript
复制
const gulp = require('gulp');
const glob = require('glob');
const sass = require('gulp-sass');
const sourcemaps = require('gulp-sourcemaps');
const cached = require('gulp-cached');
const sassGraph = require('gulp-sass-graph');

const sassGlobs = [
  './sites/all/libraries/gl/**/*.scss',
  './sites/all/modules/custom/**/*.scss',
  './sites/all/themes/{bcp_bootstrap3,gl_parent,gl_shiny,gli_bootstrap3,pru_bootstrap3,pru_bootstrap3v2,ubc_bootstrap3}/**/*.scss',
];

let sassPaths = [];

for (let j = 0; j < sassGlobs.length; ++j) {
  glob(sassGlobs[j], function (er, files) {
    let path;
    for (let i = 0; i < files.length; ++i) {
      path = files[i].substring(0, files[i].lastIndexOf('/'), '');

      if (sassPaths.indexOf(path) === -1) {
        sassPaths.push(path);
      }
    }
  });
}

gulp.task('sass', function () {
  return gulp
    .src(sassGlobs, {base: "./"})
    // .pipe(sassGraph(sassPaths))
    .pipe(cached('sasscache'))
    .pipe(sourcemaps.init())
    .pipe(
      sass({outputStyle: 'compressed'})
        .on('error', sass.logError)
    )
    .pipe(sourcemaps.write())
    .pipe(gulp.dest((file) => file.base));
});

gulp.task('watch', function () {
  return gulp.watch(sassGlobs, ['sass']);
});

gulp.task('default', ['sass', 'watch']);
EN

回答 1

Stack Overflow用户

发布于 2018-11-03 00:08:50

我用gulp-cached + gulp-dependents + gulp-filter来解决这个问题

这里的关键点是gulp-dependents,它将找到所有依赖于当前文件的父文件。

在您的情况下,您只需要:

代码语言:javascript
复制
const cached = require('gulp-cached');
const dependents = require('gulp-dependents');
const filter = require('gulp-filter');

const f = filter(['**', '!*src/partial']); //adjust this filter to filter the file you want to compile(pass to the sourcemap init method)

gulp.task('sass', function () {
  return gulp
    .src(PATH_TO_ALL_SASS_FILES, {base: "./"})
    .pipe(cached('sasscache'))
    .pipe(dependents())// this will find all parents of current changed files
    .pipe(f) //exclude the partial files,get the files you want to compile
    .pipe(sourcemaps.init())
    .pipe(
      sass({outputStyle: 'compressed'})
        .on('error', sass.logError)
    )
    .pipe(sourcemaps.write())
    .pipe(gulp.dest((file) => file.base)); // you might need to adjust the base path here, depend on your folder structure.
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40554099

复制
相关文章

相似问题

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