在 Vue 2 项目中遇到 Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (93)
错误,通常是因为 Node.js 版本与 node-sass
不兼容。以下是详细的解决方案:
1. 问题原因
node-sass
是一个依赖本地编译的包,需要与 Node.js 的运行时版本(ABI)严格匹配。- 错误码
93
表示你的 Node.js 版本(如 Node.js 16/17/18)与当前安装的node-sass
版本不兼容。 node-sass
已被官方弃用,推荐使用sass
(Dart Sass)替代。
2. 解决方案
方法 1:切换为 sass
(推荐)
步骤:
-
卸载
node-sass
:npm uninstall node-sass
-
安装
sass
(Dart Sass):npm install sass --save-dev
-
修改代码中的node-sass
引用(可忽略):- 在
vue.config.js
中配置sass-loader
使用sass
:// 项目中没有同时存在node-sass和sass不用显式配置在vue.config.js中 /**原因: ---sass-loader 7.x 版本默认使用 node-sass,不需要在 vue.config.js 中显式配置, 如果你的项目中安装了 node-sass,sass-loader 会自动使用它。 ---sass-loader 10.x 版本默认使用 sass(Dart Sass),而不是 node-sass。 如果你的项目中安装了 sass,sass-loader 会自动使用它 */ // 为什么 sass-loader@7.x但是项目中没有node-sass的依赖,只有sass,项目中也能正常使用呢? // 答:sass-loader@7.x 默认会尝试使用 node-sass,但如果项目中没有安装 node-sass,它会回退到使用 sass(Dart Sass) module.exports = { css: { // 配置CSS加载器选项 loaderOptions: { // 针对Sass加载器的配置 sass: { // 指定使用Dart Sass作为Sass的实现 implementation: require('sass'), // 使用 Dart Sass }, }, }, };
- 在
-
重启项目:
npm run serve
注意:如果vue脚手架
@vue/cli-service
版本为4.x.x,sass-loader
建议不要使用最新版,对应版本如下
sass-loader@10.1.1 + sass@1.58.0
sass-loader@11.0.1 + sass@1.58.0
方法 2:降级 Node.js 版本
如果必须使用 node-sass
,可以安装兼容的 Node.js 版本:
node-sass@4.x
→ Node.js 14 或更低。node-sass@5.x
→ Node.js 14(部分版本支持)。node-sass@6.x
→ Node.js 16(部分版本支持)。
步骤:
-
使用
nvm
(Node 版本管理工具)安装兼容的 Node.js 版本:nvm install 14.17.0 nvm use 14.17.0
-
删除
node_modules
重新安装依赖:npm install
-
重启项目:
npm run serve
方法 3:更新 node-sass
并重建依赖
如果坚持使用 node-sass
,尝试更新到最新版本并重新构建:
-
升级
node-sass
:npm install node-sass@latest
-
清除缓存并重建:
npm rebuild node-sass
-
重启项目:
npm run serve
3. 验证 Node.js 和 node-sass
版本
-
查看 Node.js 版本:
node -v
-
查看
node-sass
版本:npm ls node-sass
4. 兼容性参考表
node-sass 版本 | 支持的 Node.js 版本 |
---|---|
4.x | Node.js ≤ 14 |
5.x | Node.js 14 |
6.x | Node.js 16 |
7.x | Node.js 16/18 |
5. 为什么推荐使用 sass
?
- Dart Sass 是官方维护的替代品,无需本地编译,兼容性更好。
node-sass
已停止维护,未来不再支持新 Node.js 版本。
6. 总结
- 推荐方案:卸载
node-sass
,改用sass
(方法 1)。 - 临时方案:降级 Node.js(方法 2)或更新
node-sass
(方法 3)。