You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级EmberJS项目到Node 16遇node-sass冲突,如何解决?

解决EmberJS升级Node16时node-sass的node-gyp编译错误

核心原因

node-sass已被官方废弃,且旧版本的node-sass不兼容Node16。即便手动删除了项目依赖中的node-sass,依赖树里的第三方包可能仍会引入不兼容的旧版node-sass,导致编译失败。

具体解决步骤

1. 替换node-sass为dart-sass(官方推荐)

node-sass停止维护后,官方推荐使用纯JS实现的sass(即dart-sass),完全兼容现有Sass语法且支持Node16+:

  • 卸载旧依赖:
    yarn remove node-sass
    
  • 安装sass:
    yarn add sass --dev
    
  • 检查项目配置文件(如ember-cli-build.js),如果有指定node-sass的配置项,替换为sass。

2. 彻底清理依赖缓存与残留

旧依赖缓存可能导致问题残留,执行以下操作:

  • 删除node_modules目录:
    # macOS/Linux
    rm -rf node_modules
    # Windows
    rmdir /s /q node_modules
    
  • 删除yarn.lock锁文件:
    rm yarn.lock
    
  • 清理yarn缓存:
    yarn cache clean
    
  • 重新安装依赖:
    yarn install
    

3. 强制替换深层依赖中的node-sass

如果仍有第三方包依赖旧版node-sass,使用yarn的resolutions字段强制替换:

  • 在package.json中添加以下配置(二选一):
    • 方案一:强制使用最后支持Node16的node-sass版本(7.0.1):
      "resolutions": {
        "node-sass": "^7.0.1"
      }
      
    • 方案二:直接将所有node-sass依赖替换为sass:
      "resolutions": {
        "node-sass": "npm:sass@^1.60.0"
      }
      
  • 执行yarn install让配置生效。

4. 确认Ember版本兼容性

Ember 3.28及以上版本才正式支持Node16,如果你的Ember版本过低,需先升级Ember核心:

yarn upgrade ember-cli@^3.28.0

内容的提问来源于stack exchange,提问作者Minh Ho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:42:42