Angular 库交叉依赖
Angular libraries cross-dependency
我正在寻找有关 Angular7 库的帮助。
我有一个 项目 A,我在其中开发了两个库 - 库 1 和 库 2。第二个库 (library 2) 依赖于第一个库 (library 1)。稍后,在另一个项目中,假设 project B 我可能会使用 library 2.
我的问题是指定 库 2 依赖于 库 1。目前,这两个库构建在项目根目录中的文件夹 libs/ 中 - 这使得 library 2 从 导入库 1 在其 package.json 文件中指定或不指定它依赖于 库 1。
图书馆 1package.json
{
"name": "library-1",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^7.1.0",
"@angular/core": "^7.1.0"
}
}
图书馆 2package.json
{
"name": "library-2",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^7.1.0",
"@angular/core": "^7.1.0",
"@angular/material": "7.2.0",
"library-1": "0.0.1"
}
}
此外,它们的构建+开发位置在主 tsconfig.json 文件中指定:
{
...,
"compilerOptions": {
...,
"paths": {
"library-1": ["libs/library-1", "projects/library-1/src/"],
"library-1/*": ["libs/library-1/*", "projects/library-1/src/*"],
"library-2": ["libs/library-2", "projects/library-2/src/"],
"library-2/*": ["libs/library-2/*", "projects/library-2/src/*"]
}
}
}
有没有办法明确表示如果第一个库没有安装,第二个库就不会编译?
是的,您可以将第一个项目指定为对第二个项目的依赖package.json 文件:
"dependencies": {
"Local first project": "file:../myprojectfolder/myprojectpackagefolder"
"Git First project": "git+ssh://git@gitlab.mydomain:first-project.git"
}
如果其他人有类似的设置并且想知道我做了什么。
1.Added 指向 根级别 tsconfig.json 中特定 public_api.ts 的不同库的路径。这允许在主项目中使用库时进行即时编译。
{
...options,
"paths": {
"library-1": "projects/library-1/src/public_api.ts",
"library-2": "projects/library-2/src/public_api.ts"
}
}
2.Added library-2 到 library-1 的 package.json 中的对等依赖。如果您在项目中使用 library-2 而没有添加 library-1 作为依赖项,这将显示警告。
{
...options,
"peerDependencies": {
"library-1": "0.1"
}
}
3。添加了一个额外的 tsconfig.build.json 扩展了 tsconfig.lib.json 并从根 tsconfig 覆盖了 library-1 的路径以使用该库的编译代码。这将使用编译后的源构建 library-2,而不是将其混合并直接从 library-1 导入。
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"paths": {
"library-1": ["dist/libs/library-1"]
}
}
}
4.Use 以下命令构建 library-2 以便使用新的 tsconfig.build.json。
ng-packagr -p projects/library-2/ng-package.json -c projects/library-2/tsconfig.build.json
我遇到了与 tsconfig.json
相同的错误
"paths": {
"dxp-lib-commons": [
"projects/dxp-lib-commons/src/public-api.ts"
],
"dxp-lib-components": [
"projects/dxp-lib-components/src/public-api.ts"
],
"dxp-lib-services": [
"projects/dxp-lib-services/src/public-api.ts"
]
},
所以它是其他两个的基础,我曾指出 public-api,ts 开发和快速使用它。然而,当我们在此基础上进行构建时,它将崩溃并显示 'rootDir' 预计包含所有源文件。
因此,在查看了几篇文章后,我发现在构建时必须指向 dist 和已编译的公共资源,而不是 public-api.ts 等等我在 [= 上添加的组件和服务23=]
"paths": {
"dxp-lib-commons": [
"dist/dxp-lib-commons"
]
}
并且工作了。
我正在寻找有关 Angular7 库的帮助。
我有一个 项目 A,我在其中开发了两个库 - 库 1 和 库 2。第二个库 (library 2) 依赖于第一个库 (library 1)。稍后,在另一个项目中,假设 project B 我可能会使用 library 2.
我的问题是指定 库 2 依赖于 库 1。目前,这两个库构建在项目根目录中的文件夹 libs/ 中 - 这使得 library 2 从 导入库 1 在其 package.json 文件中指定或不指定它依赖于 库 1。
图书馆 1package.json
{
"name": "library-1",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^7.1.0",
"@angular/core": "^7.1.0"
}
}
图书馆 2package.json
{
"name": "library-2",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^7.1.0",
"@angular/core": "^7.1.0",
"@angular/material": "7.2.0",
"library-1": "0.0.1"
}
}
此外,它们的构建+开发位置在主 tsconfig.json 文件中指定:
{
...,
"compilerOptions": {
...,
"paths": {
"library-1": ["libs/library-1", "projects/library-1/src/"],
"library-1/*": ["libs/library-1/*", "projects/library-1/src/*"],
"library-2": ["libs/library-2", "projects/library-2/src/"],
"library-2/*": ["libs/library-2/*", "projects/library-2/src/*"]
}
}
}
有没有办法明确表示如果第一个库没有安装,第二个库就不会编译?
是的,您可以将第一个项目指定为对第二个项目的依赖package.json 文件:
"dependencies": {
"Local first project": "file:../myprojectfolder/myprojectpackagefolder"
"Git First project": "git+ssh://git@gitlab.mydomain:first-project.git"
}
如果其他人有类似的设置并且想知道我做了什么。
1.Added 指向 根级别 tsconfig.json 中特定 public_api.ts 的不同库的路径。这允许在主项目中使用库时进行即时编译。
{
...options,
"paths": {
"library-1": "projects/library-1/src/public_api.ts",
"library-2": "projects/library-2/src/public_api.ts"
}
}
2.Added library-2 到 library-1 的 package.json 中的对等依赖。如果您在项目中使用 library-2 而没有添加 library-1 作为依赖项,这将显示警告。
{
...options,
"peerDependencies": {
"library-1": "0.1"
}
}
3。添加了一个额外的 tsconfig.build.json 扩展了 tsconfig.lib.json 并从根 tsconfig 覆盖了 library-1 的路径以使用该库的编译代码。这将使用编译后的源构建 library-2,而不是将其混合并直接从 library-1 导入。
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"paths": {
"library-1": ["dist/libs/library-1"]
}
}
}
4.Use 以下命令构建 library-2 以便使用新的 tsconfig.build.json。
ng-packagr -p projects/library-2/ng-package.json -c projects/library-2/tsconfig.build.json
我遇到了与 tsconfig.json
相同的错误 "paths": {
"dxp-lib-commons": [
"projects/dxp-lib-commons/src/public-api.ts"
],
"dxp-lib-components": [
"projects/dxp-lib-components/src/public-api.ts"
],
"dxp-lib-services": [
"projects/dxp-lib-services/src/public-api.ts"
]
},
所以它是其他两个的基础,我曾指出 public-api,ts 开发和快速使用它。然而,当我们在此基础上进行构建时,它将崩溃并显示 'rootDir' 预计包含所有源文件。
因此,在查看了几篇文章后,我发现在构建时必须指向 dist 和已编译的公共资源,而不是 public-api.ts 等等我在 [= 上添加的组件和服务23=]
"paths": {
"dxp-lib-commons": [
"dist/dxp-lib-commons"
]
}
并且工作了。