直接换用sass(Dart Sass)即可解决,因node-sass已于2023年10月EOL,不再维护,其C++绑定严格依赖Node主版本和OpenSSL,无法兼容新版环境,故应彻底卸载node-sass和sass-loader,安装sass与sass-loader@^13,并清除配置中所有require('node-sass')硬编码。

直接换用 sass(Dart Sass)就能解决,不是“修 node-sass”,而是绕过它——因为 node-sass 已于 2023 年 10 月正式 EOL,不再维护,所有高版本 Node 下的安装失败、Missing binding、ABI 不匹配问题,本质是它根本没法跑,CSS 自然不会输出。
“could not find a binding” 是什么,为什么连 CSS 都不编译?
这不是 Sass 语法错误,而是构建链路在启动阶段就断了:node-sass 必须加载一个叫 binding.node 的二进制文件才能工作;Node 主版本一变(比如 v18 → v20),ABI 编号就变(108 → 115),而 node-sass 不会自动重建或 fallback 兼容。
- 报错时控制台甚至没打印 SCSS 文件路径,说明 loader 根本没进入解析阶段
- Webpack 卡在
sass-loader初始化环节,堆栈指向binding.js:15 -
npm install node-sass显示成功,但运行时报Missing binding:因为安装只装了 JS 层,没拉到对应 ABI 的.node文件
npm install node-sass 失败的真正原因
失败不在 npm 包本身,而在后续的 postinstall 脚本:node scripts/install.js 会尝试从 GitHub Releases 下载预编译文件,但该文件实际托管在 s3.amazonaws.com,国内直连极不稳定;下载失败后 fallback 到本地编译,这时才暴露 Python、gyp、C++ 工具链缺失等问题。
- Mac M1/M2 用户注意:
node-sass@4.x完全没有darwin-arm64binding,强行装必 fallback 编译失败 - Node v17+ 用户需加环境变量:
NODE_OPTIONS=--openssl-legacy-provider,否则gyp直接报错 - 错误提示里出现
win32-x64-83_binding.node这类路径,说明它正在找 ABI 83(对应 Node 14),但你当前是 Node 20(ABI 115)
怎么一步到位换成 sass(Dart Sass)?
这是目前最稳定、最快、跨平台零差异的解法。纯 JS 实现,无二进制依赖,npm install -D sass 秒完成,sass-loader@^13 默认就用它。
立即学习“前端免费学习笔记(深入)”;
- 先卸载旧包:
npm uninstall node-sass sass-loader(必须清掉,否则 loader 可能优先加载node-sass) - 再装新组合:
npm install -D sass sass-loader@^13 - 检查 Webpack 或
vue.config.js中是否硬编码了implementation: require('node-sass')—— 删除或注释掉 - 注意:
sass只支持.scss,不解析缩进式.sass文件;若项目混用,需先统一后缀
换完仍报错?大概率不是 Sass 的问题,而是其他环节干扰了 loader 链路:比如自定义 webpack config 里写了 use: ['style-loader', 'css-loader', { loader: 'sass-loader', options: { implementation: require('node-sass') } }] —— 这种显式引用必须删掉,否则新版 sass-loader 会被绕过。


















