LibSass无法编译现代CSS特性,因其词法解析器将所有/视为Sass除法运算符,不识别calc()、@container、color-mix()等语法,错误发生在解析层;升级Dart Sass是唯一解法,需彻底卸载node-sass和sass-loader,清理缓存,改用@use和.scss后缀,并修正除法与深度选择器写法。

LibSass 无法编译现代 CSS 特性,不是配置问题,而是它根本没能力解析——升级到 Dart Sass 是唯一解法。
LibSass 遇到 calc()、@container 就崩溃的底层原因
LibSass 的词法解析器把所有 / 都当 Sass 除法运算符,不管它在 calc(100% / 3) 里还是普通 CSS 函数中。错误发生在解析第一层,连语法树都建不起来。
-
SassError: Invalid CSS after "100%": expected expression—— 不是写错了,是 LibSass 根本不认识这个 token -
@container (min-width: 400px) { }报Unknown at rule "@container"—— AST 解析器没定义该节点类型 -
color-mix(in srgb, red, blue)同样被拒,因为函数名不在白名单里 - 加
// sass:disable-next-line没用:注释处理器压根没机会运行
升级必须卸载 node-sass,不能只装 sass
残留 node-sass 会导致 sass-loader 自动 fallback 到旧实现,构建时仍报错。
- 执行
npm uninstall node-sass sass-loader(两个都要卸) - 删掉
node_modules和package-lock.json,再npm install—— 否则旧 binding 可能被缓存加载 - 安装
sass(不是dart-sass,后者早已重定向弃用)和sass-loader@^13.3.2 - 检查 Webpack/Vue CLI 配置:确保没有
implementation: require('node-sass')或nodeSass字段
Dart Sass 下 @import 和深度选择器必须重写
这些不是“可选优化”,而是语法硬性要求,不改就编译失败。
-
@import "utils/mixins"→ 必须补全后缀:@import "utils/mixins.scss";更推荐迁移到@use "utils/mixins" as *(需放文件顶部) -
/deep/ .foo和::v-deep .foo(无空格)全部失效;Vue 2 用>>>或升级vue-loader@15.9+,Vue 3 统一用:deep() .foo - Windows 路径中的反斜杠
\会被当转义符处理,一律改用正斜杠/ - 除法必须显式括号:
(10px / 2)或用math.div(10px, 2),10px / 2直接报错
真正卡住的往往不是命令行那几行操作,而是某处配置里残留的 require('node-sass')、CI 缓存的旧 node_modules,或者某个 .sass 文件混在项目里没转成 .scss —— Dart Sass 默认不支持缩进语法。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











