竹林里有冰的博客

竹林里有冰的博客

马上订阅 竹林里有冰的博客 RSS 更新: https://zhul.in/rss.xml

node-sass 迁移至 dart-sass 踩坑实录

2025年7月5日 17:57

更新目标

  • node-sass -> sass ( dart-sass )
  • 减少影响面,非必要不更新其他依赖的版本
  • 在前两条基础上,看看能否提升 node.js 的版本

抛弃 node-sass 的理由

项目依赖版本现状

  • node@^12
  • vue@^2
  • webpack@^3
  • vue-loader@^14
  • sass-loader@^7.0.3
  • node-sass@^4

更新思路

node.js

webpack 官方并没有提供 webpack 3 支持的最高 node 版本,且即使 webpack 官方支持,webpack 的相关插件也未必支持。因此 node 版本能否更新就只能自己试。好在尽管这个项目的 CI/CD 跑在 node 12,但我日常都在用 node 14 开发,因此顺势将 node 版本提升至 14。

webpack、sass-loader

webpack 的版本目前处于非必要不更新的定时炸弹状态,基于现有的 webpack 3 限制,所支持的最高 sass-loader 版本就是 ^7 ( sass-loader 在 8.0.0 版本的更新日志中明确指出 8.0.0 版本需要 webpack 4.36.0)。

如果项目中 sass-loader@^7 支持使用 dart-sass 就可以不更新 sass-loader,也就不必更新 webpack 版本;反之,就需要同步更新 webpack 至 4,再视情况定下 sass-loader 的版本。

那么到底支不支持呢?我在 webpack 官方文档介绍 sass-loader 的页面找到了这样一段 package.json 片段

{  "devDependencies": {    "sass-loader": "^7.2.0",    "sass": "^1.22.10"  }}

这证明起码在 sass-loader@7.2.0 这一版本就已经支持 dart-sass 了,因此 webpack 版本可以停留在 ^3,而 sass-loader 暂时停留在 7.0.3 版本,如果后续有问题可以更新到 ^7 版本中最新的 7.3.1 版本。

dart-sass

sass-loader@^7 所支持的最高 sass 我并没有查到,Github Copilot 信誓旦旦地告诉我

官方文档引用:

sass-loader@^7.0.0 requires node-sass >=4.0.0 or sass >=1.3.0, <=1.26.5.

建议:

  • 如果需要使用更高版本的 sass,请升级到 sass-loader 8 或更高版本。

但事实上,我并没有在互联网上找到这段文本的蛛丝马迹。并且在 sass 的 ~1.26 版本中最后一个版本是 1.26.11 而非 1.26.5,根据常见的 npm 版本号原则,major version 和 minor version 不变,只改变了 patch version 的发版一般只有 bugfix 而没有 breaking change,不至于从 1.26.5 更新到 1.26.11 就突然不支持 sass-loader 7 了,因此更可能是 AI 幻觉或者是训练数据受限。

出于谨慎考虑,最终决定采用 webpack 官方文档中提到的 sass 1.22 的最后一个版本,也就是 1.22.12。

分析完成,动手更新

剩余内容已隐藏

查看完整文章以阅读更多