Sass --watch 不重新编译

Posted

技术标签:

【中文标题】Sass --watch 不重新编译【英文标题】:Sass --watch not recompiling 【发布时间】:2014-08-03 21:28:50 【问题描述】:

当我将更改保存到 build.scss 时,Sass 会更新我的主样式表 build.css,但不会在我保存对任何部分的更改时更新 build.css,例如 _grid-settings.scss。每次我对部分进行更改时,我基本上都必须手动重新保存build.scss,以便 Sass 检测到更改。

从我的终端:

Justins-MacBook-Air:ageneralist justinbrown$ sass --watch stylesheets:stylesheets
>>> Sass is watching for changes. Press Ctrl-C to stop.
  write stylesheets/build.css
[Listen warning]:
  Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback.

我的目录是:

stylesheets/
├── base
│   └── _base.scss
├── build.css
├── build.scss
├── layout
│   └── _layout.scss
└── vendor
    ├── _grid-settings.scss
    ├── bourbon
    ├── highlight
    └── neat

我正在使用:

Sass 3.3.8. Ruby 2.0.0-p353 OSX 10.9

我浏览了几篇关于 sass --watch 问题的 SO 帖子,但都没有帮助指导我找到解决方案。

编辑:我在这里添加我的build.scss,以防万一出现问题:

@import "vendor/bourbon/bourbon";
@import "vendor/grid-settings";
@import "vendor/neat/neat";
@import "base/base";
@import "layout/layout";

【问题讨论】:

Mb 是否可以使用绝对导入路径? @JAre 试过了,但我得到了相同的结果。 sass 是否有可能没有监控stylesheets 下的所有子目录? 你可以通过添加非部分scss文件来测试它。 @JAre 通过添加 vendor/test.scss 进行了尝试,但仍然没有运气。 sass --watch 在启动时处理两个非部分 scss 文件,但不会在后续保存时更新 test.css。 【参考方案1】:

我遇到了同样的问题。

我设法通过删除 SASS 缓存目录来修复它。我还运行 sudo gem update 来更新我系统上的所有 gem。

我不确定这些东西中的哪一个修复了它,或者它是否是两者的结合。

【讨论】:

已经有一段时间了,但我认为如果我完成了下面@EoghanM 建议的gem updategem install listen,那可能会成功。 SASS 缓存在哪里? 它位于一个名为“.sass-cache”的隐藏文件夹中,位于您编译 SASS 文件的任何位置的根目录中。【参考方案2】:

我也坚持 Sass 似乎没有正确观察所有文件更改的问题。

Sass 无法观察由向上观察文件的路径定位的文件的变化。例如:

变体 A(我有)

scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app
    └── app.scss

app.scss 在哪里:

@import '../base/container1'
@import '../utils/utils'

编译

sass --watch app/app.scss:../css/styles.css

sass --watch app:../css

在这两种情况下,sass 只跟踪 app.scss 文件更改,但 controller1.scssutils.scss强>

变体 B(解决方案)

scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app.scss

app.scss 在哪里:

@import 'base/container1'
@import 'utils/utils'

编译

sass --watch app.scss:../css/styles.css

变体 C(解决方案)也有效

scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app.scss

app.scss 在哪里:

@import 'base/container1'

和controller1.scss:

@import '../utils/utils'
// ...

【讨论】:

在 2020 年使用 dart sass 遇到了同样的问题。似乎是正确的,它不监视任何涉及超出被监视文件所在文件夹的文件路径。谢谢!【参考方案3】:

这对我来说不是一个令人满意的答案,但我最终尝试了另一个可以处理预处理的 gem,guard-livereload,虽然它本身不起作用,但当我回来尝试正确地尝试 sass --watch sass监视我的样式表目录的更改(包括部分内容)并随后重新编译build.scss

我不确定为什么它现在可以工作,但我猜测与 guard 或 guard-livereload 一起安装的其中一个 gem 解决了这个问题。也许是listenfssm

【讨论】:

当我执行sudo gem install listen 时,'listen will be polling for changes'警告消失了。不确定这是否为您解决了整个问题。 @EoghanM 这似乎与我所看到的一致。【参考方案4】:
interface FileImporter 
  findFileUrl(
    url: string,
    options: fromImport: boolean
  ): FileImporterResult | null;

【讨论】:

欢迎来到 ***。虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将提高​​答案的长期价值。

以上是关于Sass --watch 不重新编译的主要内容,如果未能解决你的问题,请参考以下文章

laravel gulp watch 不更新 sass css 文件

在 Webpack 中 watch 编译期间加速 scss 的方法

为啥我的sass 不会自动编译成css

SASS初体验

重新编译jdk源码,启用debug信息

sass --watch 在初始启动后不更新(sass 3.1.16)