升级EmberJS应用到ember-cli及Ember Data 3.28后出现阻塞性错误如何解决
Ember 3.28 升级
Ember._Backburner 报错排查解决 错误根因
Ember 3.28 正式移除了内部私有API Ember._Backburner,报错是由于依赖包仍然调用了这个已废弃的私有接口,多数情况是ember-data版本和Ember框架版本不匹配导致。
排查步骤
- 检查
package.json中ember-source和ember-data的版本:Ember 3.28必须搭配3.28.x及以上适配版本的ember-data使用,低于该版本的ember-data会调用已移除的私有API触发报错 - 全局搜索项目代码(含第三方插件)中的
Ember._Backburner引用,确认是否有自定义业务代码或旧版第三方插件直接调用了该私有API - 排查是否为构建缓存导致的旧代码残留,升级后未清理缓存也可能加载旧版本的依赖代码
解决方法
- 优先升级
ember-data到匹配版本:
npm用户执行:npm install ember-data@~3.28.0 --save
yarn用户执行:yarn add ember-data@~3.28.0 - 升级后仍报错的话,处理其余
Ember._Backburner引用:- 自定义业务代码的引用:替换为
@ember/runloop公开API,或者单独引入backburner.js库替代私有API调用 - 第三方插件的引用:升级对应插件到适配Ember 3.28的版本,或临时打补丁修复对应代码
- 自定义业务代码的引用:替换为
- 清理缓存后重新构建:
执行如下命令清理旧依赖和缓存:rm -rf node_modules tmp dist package-lock.json yarn.lock
之后重新安装依赖、启动服务即可 - 临时兼容方案:如果需要快速修复旧代码运行,可在应用入口
app.js顶部添加兼容代码:
注意:该方案仅为临时救急使用,私有API无长期兼容保障,建议尽快替换为公开API实现import Backburner from 'backburner'; Ember._Backburner = Backburner;
内容的提问来源于stack exchange,提问作者Syl
相关产品推荐
相关产品推荐

