【发布时间】:2019-01-27 07:46:01
【问题描述】:
我们正在运行 Gulp 4,并且有一个主要的 scss 文件,它通过 @import 拉入部分文件。例如:app.scss,而app.scss 中有一行,@import "partials/_mypartial.scss";。
我们还有一个名为 styles 的任务正在运行,我们目前正在通过 gulp styles 手动运行该任务,以解决此问题。
问题是,如果我们直接对app.scss 进行更改,例如添加更多@import 部分,或者我们更新文件中的cmets,gulp-sass 可以完美运行并将.css 文件编译为有意的。
但是,如果我们所做的只是更新部分文件(app.scss 中没有任何变化),即混合或声明,gulp-sass 不会在运行 styles 任务时提取更新。
最终发生的是 css 文件被创建并放置在 dest 目录中,其时间戳与上次“处理”app.scss 时的时间戳相同,但未对部分文件进行更改。
我们没有告诉 gulp-sass 缓存任何东西,而是使用默认设置。知道为什么仅在更新部分文件时会发生这种情况吗?
目录结构:
/assets/src/scss/app.scss/assets/src/scss/partials/_mypartial.scss
app.scss 内容:@import "partials/mypartial";
_mypartial.scss 内容:.row { margin-left: -35px; }
注意:这些是用于解决问题的测试文件。如果我们所做的只是触摸 _mypartial.scss,即将 margin-left 更改为其他值,手动运行 gulp style 不会获取更改。如果我们触摸 app.scss,则 _mypartial.scss 更改会根据需要被拾取。
Gulpfile sn-ps:
gulp.task('styles-build-sass', function () {
return buildSass(config.styles.postcss);
});
gulp.task(
'styles',
gulp.series(
'styles-clean-entry',
'styles-build-sass',
'styles-minify',
'styles-staging',
'styles-clean-exit',
)
);
function buildSass(settings)
{
return gulp
.src(settings.src)
.pipe(plugins.plumber({
errorHandler: handleErrors
}))
.pipe(plugins.sass({
errLogToConsole: true,
outputStyle: 'expanded
}))
// Create *.css.
.pipe(gulp.dest(settings.dest)).on('end', function () {
plugins.log((plugins.colors.symbols.check) + " " +
(plugins.colors.bold.green.underline('Stage 2: Sass has been
compiled into native CSS ... [buildSass()]')));
})
}
【问题讨论】:
-
你能发布你的 gulpfile 的相关部分吗?
-
我正在从 CLI 手动运行任务,即
gulp styles,这是目前解决此问题所必需的。我也用更多信息更新了上面的问题。 -
一年后,我遇到了同样的问题。你有没有找到真正的解决方案?我注意到你在 gulp-sass Github repo 上关闭了你自己的问题。我目前的解决方法是进行一些虚拟更改,强制重新编译,然后删除该更改并重新保存。
-
这里也一样,@cjl750。你能解决这个问题吗?
-
@Dong3000 当我发表该评论时,我提出了我正在从事的项目,gulp-sass 的东西似乎与 partials 配合得很好。不幸的是,我不确定要提供什么答案,因为我真的不记得我最终做了什么,而且我没有看到任何明确提供问题解决方案的提交。我可以告诉你我之前使用 gulp-ruby-sass 并更改为 gulp-sass,这需要在 Gulp 任务中进行轻微的语法更改,这可能是我的问题。如果您还从 gulp-ruby-sass 升级,我建议您仔细阅读 gulp-sass 文档。