angular - 生成Angular库时的循环依赖
问题描述
编辑
似乎只有在使用生产构建时才会弹出循环依赖项-ng build lib --prod
我正在生成一个 Angular 库以在不同的 Angular 项目中使用。但是,在编译代码时,我在其中一个桶中收到了循环依赖警告。这是我的代码:
modal.controller.ts
import { BackdropController } from './backdrop-controller';
export class ModalController {
...
}
免责声明:BackdropController 不导入 ModalController 或 Barrel (index.controller.ts)
index.controllers.ts
export * from './backdrop-controller';
export * from './modal-controller';
现在上面的代码对我来说似乎是正确的。ModalController
只是BackdropController
直接进口,而不是从桶中进口任何东西。从 Angular 应用程序的角度来看,我会说这是绝对正确的,并且不会产生循环依赖。
然而!在构建项目时,我确实得到了循环依赖。如果构建文件与此类似,则输出(简化):
index.controller.js
export * from './backdrop.controller';
export * from './modal.controller';
modal.controller.js
import { BackdropController } from '../backdrop/backdrop.controller';
import * as i0 from '@angular/core';
import * as i1 from '../_index';
export class ModalController {
...
}
new i1.ModalController(...)
编译代码中的问题似乎是模块构建。在第 3 行,将桶导入为import * as i1 from '../_index'
,最后将 ModalController 添加到模块i1
中 -import * as i1 from '../_index'
有没有办法修复这种仅在构建代码时出现的循环依赖?
解决方案
一种解决方案是(在角度 12 中测试)设置compilationMode
为full
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"compilationMode": "full"
}
}
这不是一个完美的解决方案,但它确实有效。你可以在这里
看到它的作用
此处建议另一种解决方案(使用动态组件)。
我还发现这两篇文章对此非常有用。(Angular Linker和Ivy 库编译)
如果它确实解决了您的问题,请告诉我。
推荐阅读
- ios - 'UIKit/UIUserActivity.h' 文件未找到,Xcode 9.4
- continuous-integration - 如何将 Concourse resource_types 定义存储在外部文件中并将它们导入管道?
- c++ - 在 NS2 中将 C++ 函数返回值推送到 OTcl
- spring-boot - 无法在 Kubernetes Spring Boot 应用程序中设置会话 cookie 最大年龄
- r - 基于多个变量重新排序列表
- android - Android 关闭屏幕上的图标
- azure - 静态托管 - 单个 blob 存储帐户中的多个网站
- ubuntu-18.04 - 升级到 laravel 6.0 - 由于“默认”方法,工作迁移现在失败,可能是 MariaDB 问题
- macos - 如何在 Mac OS 中将我的 .app 转换为 .dmg,其中包含一些额外的隐藏文件
- java - JDK11 异常;客户端首选项不接受服务器选择的协议版本 TLS10 [TLS13, TLS12, TLS11]