【问题标题】:How to make node-sass-middleware not re-compile every time even if no changes?即使没有更改,如何使 node-sass-middleware 每次都不会重新编译?
【发布时间】:2016-12-21 20:20:15
【问题描述】:

据我所知,我在 Express 中用于编译 .scss 文件的 node-sass-middleware 会在每次处理请求时从我的 .scss 文件中重新编译 .css 文件。

这对于生产环境来说并不理想,我更希望它只重新编译自上次编译后发生更改的文件。我认为这可以通过以某种方式嗅探目标文件夹/文件来实现,但我想知道是否有一种我不知道的直接方法来实现这一点。可能是node-sass 的标志或我缺少的东西,尽管我在文档中找不到任何东西。

可能实际上每次都没有重新编译,但我不确定如何测试。

希望有人可以提供帮助!谢谢!

【问题讨论】:

    标签: node.js express sass node-sass


    【解决方案1】:

    所以在提交问题后我很快就想到我可以检查文件的last modified 元数据来确定文件是否已重新编译。哎呀。

    我做了一个测试:

    1. 启动应用并请求页面,以便首次编译 .css 文件
    2. 记下.css 文件的last modified 时间
    3. 再次请求页面
    4. 将当前last modified时间与上一次比较,发现没有变化
    5. 更改了.scss 文件
    6. 再次对比last modified的时间,发现除了样式变化反映在页面上外,还发生了变化

    因此,我得出结论,node-sass-middleware 以某种方式检测到没有进行任何更改并且没有不必要地重新编译 Sass,这很高兴知道。我想结合它在 RAM 中缓存 CSS 文件的能力,这是一个非常有效的开箱即用解决方案。

    注意:我做了一些进一步的测试,发现即使没有对.scss文件进行更改并且现有的.css文件完全有效,重新启动应用程序也会导致重新编译Sass .这表明它不仅仅是嗅探文件夹/文件内容。

    【讨论】:

    • 另一个观察:无论如何,它似乎在一段时间后重新编译(我不确定,但至少是五分钟)。这与maxAge 选项没有任何关系,因为即使我将其设置为几秒钟,它也不会在大约一分钟后重新编译。
    【解决方案2】:

    每次处理请求时,都会从我的.scss 文件中重新编译.css 文件。

    来自documentation

    可选配置:

    • force - [true | false],默认为 false。总是重新编译。

    我猜你可以使用你的环境变量来防止.scss在生产模式下重新编译...

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 2015-02-17
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多