在Angular项目打包时遇到了循环依赖导致build失败的问题。
原因和解决方案
在我的项目文件中,同一个shared module下有两个类文件:localize.pipe.ts和auth.service.ts。其中,在AuthService中以下面的错误方式引用了LocalizePipe:
//auth.service.ts
import { LocalizePipe } from 'shared-lib/src/lib/shared';
由于在shared.module.ts里声明并提供了LocalizePipe服务(如下图),使其它模块下的组件可以通过导入shared模块访问LocalizePipe,也就是上图中的导入方式 import { LocalizePipe } from 'shared-lib/src/lib/shared'。因此在打包过程中,如果模块内的auth.service也试图通过该模块来导入pipe,就会造成循环依赖报错!!
//shared.module.ts
@NgModule({
declarations: [ LocalizePipe ],
exports: [ LocalizePipe ],
imports: [],
providers: [ LocalizePipe ]
})
[ 解决 ] 同一模块内服务的导入必须是以相对路径的形式:
//auth.service.ts
import { LocalizePipe } from '../pipes/localize.pipe';
文件结构如下:
==== 在使用VS Code自动填充路径的时候一定要注意看清楚,不要像我一样偷懒出错T_T =====