node-sass已彻底停止维护,dart sass是sass官方唯一受支持的实现;libsass于2020年底终止开发,node-sass不再更新语法、安全补丁或适配新node版本,所有新特性(如@use、color-mix、@container)仅在dart sass中支持。

node-sass 已彻底停止维护,Dart Sass 是唯一受支持的实现
LibSass 在 2020 年底终止开发,node-sass 作为其封装,不再接收任何语法更新、安全修复或 Node.js 新版本适配。你遇到的安装失败、@use 报错、@layer 不识别,根源都是它“动不了”了。而 sass(即 Dart Sass)是 Sass 官方当前唯一 actively maintained 的实现,所有新 CSS/Sass 特性——比如 color-mix()、@container、模块作用域——只在这里落地。
迁移不是“升级”,而是卸载 + 替换 + 清理三步闭环
常见错误是只装 sass 却没卸干净 node-sass,导致 sass-loader 仍 fallback 到旧实现:
- 运行
npm uninstall node-sass sass-loader—— 两个都必须删,不能留一个 - 安装
npm install -D sass sass-loader@^13(Webpack 5 推荐用sass-loader@13.3.2) - 删掉
node_modules和package-lock.json,再npm install—— 否则残留的 require 路径可能被缓存 - 检查构建配置:Vue CLI 用户确认
vue.config.js中无nodeSass字段;Webpack 用户确保sass-loader配置里没硬编码implementation: require('node-sass')
Dart Sass 报错 ≠ 配置失败,而是暴露了原来被宽容掩盖的问题
node-sass 对语法宽松,常悄悄忽略错误;sass 更严格,报错其实是帮你提前发现隐患:
-
Invalid CSS after "@import":说明还在用@import,必须全部换成@use,且@use必须在文件最顶部 -
Undefined variable "$color-primary":Dart Sass 作用域隔离更严,检查是否漏了@use "path/to/vars" as *,或变量定义写在了@use之后 -
expected selector出现在/deep/上:Vue 项目中该语法已不被支持,需改为::v-deep或使用:deep() - 混用
.sass(缩进语法)和.scss:Dart Sass 默认只处理.scss,统一后缀再迁移
真正卡住的往往不是命令,而是某处残留或覆盖
执行完所有步骤仍失败?重点排查这三处:
- CI 环境里缓存了旧版
node_modules,或 Docker 构建层未清除node_modules - 某个插件(如
@dcloudio/vue-cli-plugin-uni)内部 loader 链覆盖了sass-loader输出 -
manifest.json或其他非标准配置文件里写了"sassImplementationName": "node-sass"这类强制回退项
这些地方不显眼,但只要存在一个,整个迁移就白做了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











