【问题标题】:Gulp SASS Not Compiling @import ChangesGulp SASS 不编译 @import 更改
【发布时间】: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 文档。

标签: npm sass gulp gulp-sass


【解决方案1】:

由于您没有提供 gulpfile.js 的内容,而且我不知道您的目录结构 - 以下是我根据您的问题做出的假设:

  1. 我想您的 SCSS 监视任务看起来像这样: gulp.watch('styles/*.scss', ['styles']);
  2. 我想您的部分存储在主 SCSS 文件的子目录中

如果我的假设是正确的 - 那么答案很简单。请注意 glob 定义是styles/*.scss。这意味着“所有具有.scss 扩展名的文件直接 驻留在目录styles 中”。由于部分存储在子目录中 - 它们根本不匹配这个 glob,因此没有被监视。

修复也很简单 - 您需要更新您的观看 glob 以包含子目录:styles/**/*.scss

【讨论】:

  • 我正在从 CLI 手动运行任务,即 gulp styles,这是目前解决此问题所必需的。我也用更多信息更新了上面的问题。
  • @GregoryMatthews 你在gulp.src 中传递的settings.src 中有什么内容?
  • 基本上就是srcDirs.scss + '*.scss'。我也试过srcDirs.scss + '**/*.scss'。 srsDirs 解析为 /assets/src/scss。
  • 不应该是srcDirs.scss + '/*.scss'吗?否则你会得到一个无效的路径
  • 不,因为我所做的只是拉入app.scss,当我手动运行它时,一切正常。问题是,如果我所做的只是对mypartial.scss 进行更改而不触及app.scss,则在生成的.css 文件中看不到对mypartial.scss 所做的更改(即使app.scss 通过@ 将其拉入987654341@)。如果我触摸app.scss,则会显示对mypartial.scss 所做的更改。我不确定为什么 gulp sass 不是简单地重新编译所有定义的东西,而不管文件是否被“触摸”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多