gpt4 book ai didi

Gulp:编辑导入的 SCSS 文件时只编译更改的文件并编译父文件

转载 作者:行者123 更新时间:2023-12-02 01:20:18 24 4
gpt4 key购买 nike

在工作中我们曾经使用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。

这是我的 gulp 文件

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']);

最佳答案

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

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

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

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.
});

关于Gulp:编辑导入的 SCSS 文件时只编译更改的文件并编译父文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com