第一个问题
您收到该错误是因为您的测试项目没有在其node_modules/
目录中安装这些依赖项。但我相信按照@Renato 的建议执行并强制库的用户手动安装这些依赖项是错误的方法。
为了自动安装缺少的依赖项,有必要在两个地方(在库本身内)添加库的第 3 方依赖项:
package.json
在库的根目录。我相信你已经做到了。将所有包放在这里可确保node_modules/
在运行项目进行开发时根目录下只有一个目录。
projects/entity-selector/package.json
是 Angular 在构建库时生成的 package.json 文件的基础文件。有必要在此处添加依赖项,以便库的使用者知道他们(嗯,他们的包管理器)需要下载哪些包。我相信这是你目前所缺少的。
第二个问题
在将我的依赖项正确添加到这两个地方后,我得到了构建错误,告诉我应该为我的库使用“peerDependencies”而不是“dependencies”。
这不适用于我的用例,因此为了解决这个问题,我必须明确地将我的依赖项列入白名单。这样做看起来会有所不同,具体取决于您使用的是以下哪一项:
projects/entity-selector/package.json
projects/entity-selector/ng-package.json
.
其中projects/entity-selector/package.json
应该是:
{
"$schema": "../../../node_modules/ng-packagr/package.schema.json",
"ngPackage": {
"lib": {
"entryFile": "public_api.ts"
},
"dest": "../../../dist/mycomponents/entity-selector",
"whitelistedNonPeerDependencies": [
"mycomponents/shared-services",
"mycomponents/spinner",
"mycomponents/text-input"
]
}
}
其中projects/entity-selector/ng-package.json
应该是:
{
"$schema": "./node_modules/ng-packagr/package.schema.json",
"lib": {
"entryFile": "public_api.ts"
},
"whitelistedNonPeerDependencies": [
"mycomponents/shared-services",
"mycomponents/spinner",
"mycomponents/text-input"
]
}
最后,不要忘记构建你的项目,否则当你尝试发布到 NPM 时,ng build --prod
你会收到关于新 Ivy 编译器的错误!