组件X与Y循环依赖求助:导入接口触发ng-packagr报错
解决ng-packagr入口点循环依赖问题
问题原因
你遇到的循环依赖不是因为接口本身,而是入口级的依赖关系:组件X所在的入口@foo/bar/componentx导入了组件Y的入口@foo/bar/componenty,而Y又从X的入口导入接口,导致ng-packagr认为两个入口互相依赖,触发报错。即使只导入接口,入口的依赖链已经形成了循环。
解决方案
抽离共享类型到独立入口
把componentx.model.ts里的NiceInterface这类共享接口/类型,单独放到一个无依赖的入口(比如@foo/bar/shared-models)。这样组件X和Y都从这个共享入口导入类型,彻底切断两个组件入口之间的依赖链。
操作步骤:- 创建
shared-models目录,新建nice.interface.ts(或直接迁移原model文件) - 在组件X和Y中,替换导入路径为
import { NiceInterface } from '@foo/bar/shared-models';
- 创建
直接导入文件而非入口点
不要通过入口别名@foo/bar/componentx导入接口,改成直接导入对应的文件路径,比如:import { NiceInterface } from '../componentx/componentx.model';这种方式不会触发ng-packagr对整个入口的依赖分析,能避开入口级的循环报错。
使用TypeScript类型导入(如果适用)
如果组件X导入组件Y只是为了类型标注,把导入改成类型导入:import type { ComponentY } from '@foo/bar/componenty';TypeScript编译后会移除这类导入,不会留下实际的依赖引用,可能打破循环。
内容的提问来源于stack exchange,提问作者Juuro
相关产品推荐
相关产品推荐

