旧版Ember项目构建报错Cannot read property 'pkg' of null如何解决
错误原因
你遇到的报错是环境版本和旧项目不兼容导致的,具体触发逻辑如下:
- 你当前使用的
ember-cli@0.1.5是2014年发布的版本,官方仅兼容Node.js 0.10.x/0.12.x、npm 2.x系列,你使用的Node 6.x、npm 6.x远超出其兼容范围 - npm 3.x之后默认采用扁平化依赖安装规则,和npm 2.x的嵌套依赖逻辑完全不同,旧版ember-cli的插件寻址逻辑是基于嵌套依赖设计的,扁平化后会导致Addon寻址失败返回null,调用null的
pkg属性就会抛出对应报错 - 只要调用ember命令就会触发插件初始化逻辑,所以即使不执行build操作,直接运行ember也会报错
解决方案
1. 切换到匹配的Node.js版本
使用nvm安装Node 0.12.x版本,这是ember-cli 0.1.5官方支持的最高Node版本:
nvm install 0.12.18 nvm use 0.12.18
如果没有安装nvm,手动下载安装对应版本的Node 0.12.x即可
2. 降级npm到2.x系列
手动降级npm到兼容的2.15.x版本:
npm install -g npm@2.15.12
执行npm -v确认版本为2.15.12即可。
3. 清理原有依赖并重新安装
删除旧的依赖文件,用npm 2.x重新安装依赖:
rm -rf node_modules package-lock.json yarn.lock npm install
不要使用yarn、pnpm等其他包管理器,旧项目仅兼容npm 2.x的依赖结构
4. 验证修复效果
执行ember -v确认能正常输出版本信息,没有报错后再执行make build即可完成构建。
注意事项
- 不要随意升级项目内的Ember相关依赖版本,旧版Ember生态的依赖版本强绑定,升级会引发更多兼容性问题
- 如果安装依赖过程中出现原生包编译失败,可以根据报错信息手动安装对应兼容Node 0.12的版本即可
内容的提问来源于stack exchange,提问作者thankyoutybg
相关产品推荐
相关产品推荐

