Angular库的次要入口点彼此依赖

3

我正在尝试创建一个带有每个模块次要入口的angular库。

我有三个模块:A、B和C。A是独立的,但B依赖于C,这意味着我需要在B.module.ts中使用import获取C.module.ts

我遵循了这篇文章,所以我在每个模块中都有一个package.jsonindex.tspublic_api.ts文件。

当我尝试构建库时,我收到以下错误:

------------------------------------------------------------------------------
Building entry point '@org/library-name/src/lib/A'
------------------------------------------------------------------------------
Compiling TypeScript sources through ngc
Bundling to FESM2015
Bundling to UMD
Minifying UMD bundle
Writing package metadata
Built @org/library-name/src/lib/A

------------------------------------------------------------------------------
Building entry point '@org/library-name/src/lib/B'
------------------------------------------------------------------------------
Compiling TypeScript sources through ngc
ERROR: Unable to write a reference to CComponent in /.../projects/library-name/src/lib/C/C.component.ts from /.../projects/library-name/src/lib/C/C.module.ts

有什么办法可以让它工作吗? 提前感谢。


你有找到任何解决方法吗?我也遇到了同样的问题。 - DicBrus
你能提供一个存储库,让我查看代码库吗? - jrltt
1个回答

3
我可以告诉你我是如何解决这个问题的。
这里的问题是要理解ng-packagr如何根据入口点/文件夹结构构建我们的库。
在我的特定情况下,我有以下结构:

folder_structure

输出结果是2个块,对吗?一个是my-lib/common,另一个是my-lib/common/big-chunk
恰好次要入口点在主要入口点之前构建,因此如果需要共享逻辑,则需要将其(并导出它)放在次要入口点my-lib/common/big-chunk上,并在主要入口点my-lib/common上使用它。
如果您发现需要共享逻辑,请考虑创建一个shared入口点。
我发现使用和实现次要入口点非常棘手,可能需要进行一些重构才能使它们正常工作并充分发挥它们所带来的全部优势,但总体而言,我认为这完全值得 :)

你能否用示例进一步解释一些细节?如果C组件是全局共享的,那么我们如何同时在B组件和A组件中使用它呢? - dhana
@MiguelSsSRrR,根据我的使用情况,我需要在两个不同的独立入口点(比如A和B模块)上使用一个共同的单例服务。你能帮我理解如何在两个独立模块中调用这个共同的单例服务吗? - sarangan
3
@dhana @sarangan 我认为你们两个有相同的用例,这是我上面所解释的内容的扩展。
  • 您需要为共享逻辑创建一个单独的入口点(无论它是服务、组件还是仅仅是一个函数),并在使用者上导入它。
  • 假设您创建了一个名为 my-lib/common/shared 的入口点,其中包含您想要共享的逻辑。
  • 在使用者 A 或 B 上,您将需要 import {FantasticLogic} from 'my-lib/common/shared'
- MigueMike
@MiguelSsSRrR 非常感谢。它正在按预期工作。 - sarangan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接