首页 > 解决方案 > Angular 6 包模块内依赖

问题描述

我正在尝试创建一个包含多个模块但在模块依赖方面遇到困难的库。我正在使用 Angular 6:

"@angular-devkit/build-ng-packagr": "^0.7.0-rc.3",
"@angular-devkit/build-angular": "^0.7.0-rc.3",
"ng-packagr": "^4.0.0",

我首先创建了一个新库,使用ng g library package它创建了以下结构

projects
|- package
   |- src
   |  |- lib
   |  |  |- *.ts
   |  |-public_api.ts
   |- ng-package.json
   |- package.json
   |- tsconfig.lib.json

我想添加一个子包,该子包将具有一个依赖于主包的模块。ng-packagr 用于子包的结构(据我所知)是这样的:

projects
|- package
   |- src
   |  |- lib
   |  |  |- package.module.ts
   |  |-public_api.ts
   |- ng-package.json
   |- package.json
   |- tsconfig.lib.json
   |
   |- sub-package
   |   |-src
   |   |  |- sub-package.module.ts
   |   |- public_api.ts
   |   |- package.json

sub-package.module 依赖于 package.module。我不能在 sub-package.module 中使用相对路径进行导入,因为我收到一条错误消息,指出包的所有代码都应该在 rootDir 中。

当我尝试使用添加到 tsconfig 的路径 ng-packagr 时(创建库时),我收到一个错误Cannot read property 'isSkipSelf' of null

我尝试向子包 package.json 中的 ngPackage 对象添加pathslib\externals属性,但这没有帮助。

我究竟做错了什么?

标签: angularangular6ng-packagr

解决方案


你当然不能使用相对路径。您应该使用绝对路径,例如package-name/path/to/module.

因此,您可以创建多个包(如package-name/corepackage-name/cli等),也可以使用子条目。我建议你阅读这篇文章来实现这一点。


推荐阅读