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 update
或gem 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.scss 或 utils.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 解决了这个问题。也许是listen
或fssm
?
【讨论】:
当我执行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 文件