Angular库中使用RouterModule触发NG0203错误求助
排查思路:Angular 14 库路由/NGRX Feature模块注入上下文错误
问题场景
主应用通过loadChildren懒加载自定义库@mytest/core的TestModule,库中使用RouterModule.forChild()或NGRXStoreModule.forFeature()时,运行时抛出NG0203: inject() must be called from an injection context错误;移除上述模块调用后恢复正常,且已确认所有@angular/*依赖版本一致。
核心排查方向
检查库的构建与依赖配置
- 确认库的
package.json中peerDependencies包含所有必要依赖(如@angular/router、@ngrx/store),版本范围与主应用严格匹配,示例:
{ "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0", "@angular/router": "^14.0.0", "@ngrx/store": "^14.0.0" } }- 检查库的
ng-package.json,确保开启injectable: true(Angular Package Format v14+要求),避免模块初始化时注入上下文丢失。
- 确认库的
排查模块导入与初始化冲突
- 确认主应用未提前同步导入
TestModule或库内其他模块,防止重复初始化导致注入上下文混乱; - 检查
TestModule及关联代码,禁止在静态方法、非注入类、模块初始化外的逻辑中调用inject(),这类场景会直接触发上下文错误。
- 确认主应用未提前同步导入
清理缓存与修复依赖重复加载
- 执行
ng clean清除CLI构建缓存,重新构建库和主应用; - 若使用
npm link/yarn link关联本地库,改用本地文件依赖(如"@mytest/core": "file:../core"),避免主应用与库的node_modules中出现重复的Angular包。
- 执行
验证模块工厂的注入逻辑
堆栈跟踪指向RouterModule_Factory,说明路由模块初始化时无法获取正确上下文:- 尝试在
TestModule的RouterModule.forChild()中显式声明providers配置,避免隐式依赖的注入冲突; - 检查库内
providedIn: 'root'的服务,确认其未依赖路由/NGRX特性模块的延迟初始化逻辑,导致服务提前加载时上下文不完整。
- 尝试在
确认Angular 14兼容性规范
确保库通过ng generate library创建,使用官方APF构建流程,避免自定义webpack配置导致模块隔离异常——Angular 14对注入上下文的校验更严格,非规范构建的库容易触发此类错误。
内容的提问来源于stack exchange,提问作者cube
相关产品推荐
相关产品推荐

