EmberJS更新代码时报Cannot read property '_application' of undefined错误
问题根因
- 热重载上下文失效:Ember 热重载机制触发时,旧应用实例没有被完全销毁回收,新启动的实例初始化器尝试访问已经被释放的旧实例身上的
_application属性,就会抛出这个类型错误。 - 自定义初始化器兼容问题:如果项目中自行编写了实例初始化器,没有处理实例销毁状态的判断逻辑,热重载时初始化器会拿到过期的实例引用,触发报错。
- Ember CLI 版本bug:3.1x 到 3.27 之间的部分 Ember CLI 版本存在热重载缓存bug,重载前不会正确清理旧的初始化器注册信息,导致执行逻辑异常。
解决方法
- 快速临时修复:不需要重启本地服务,触发报错后直接手动刷新浏览器页面即可恢复正常,比重启
ember serve进程效率更高。 - 兼容自定义初始化器:修改
app/instance-initializers/目录下的所有自定义初始化器文件,增加实例状态判断逻辑,参考代码:
export function initialize(appInstance) { // 跳过已销毁/销毁中的实例,避免热重载报错 if (appInstance.isDestroyed || appInstance.isDestroying) return; // 原有初始化逻辑保留在此处 }
- 升级依赖版本:将 Ember CLI 升级到 3.28 LTS 及以上的稳定版本,官方已经修复了对应版本的热重载缓存问题。
- 关闭热重载:如果以上方案都无法适配你的项目,可以在启动服务时添加参数
ember s --no-live-reload,关闭热重载功能,修改代码后手动刷新页面即可彻底规避该错误。
内容的提问来源于stack exchange,提问作者jwesonga
相关产品推荐
相关产品推荐

