Angular7库交叉依赖

时间:2019-02-18 13:06:25

标签: javascript angular typescript package.json tsconfig

我正在寻找有关Angular7库的帮助。

我有一个项目A ,其中我开发了两个库-库1 库2 。第二个库(库2 )对第一个库(库1 )具有依赖性。后来,在另一个项目中,假设项目B ,我可能会使用库2

我的问题是指定库2 依赖于库1 。当前,这两个库都位于项目根目录中的 libs / 文件夹中-这使得从 library 1 导入的 library 2 可以使用并且未指定其依赖于 package.json 文件中的库1

库1 package.json

{
  "name": "library-1",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^7.1.0",
    "@angular/core": "^7.1.0"
  }
}

库2 package.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"
  }
}

此外,它们的build + dev位置在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/*"]
    }
  }
}

有没有一种方法可以使我明确指出,如果未安装第一个库,则第二个库不会编译?

2 个答案:

答案 0 :(得分:0)

是的,您可以将第一个项目指定为对第二个项目package.json文件的依赖项:

"dependencies": {
    "Local first project": "file:../myprojectfolder/myprojectpackagefolder"
    "Git First project": "git+ssh://git@gitlab.mydomain:first-project.git" 
}

答案 1 :(得分:0)

如果其他人也有类似的设置,并且想知道我做了什么。

1。在根级别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。将库2的 package.json 中的对等依赖项添加到库1。如果您在项目中使用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。使用以下命令构建库2,以便使用新的tsconfig.build.json。

ng-packagr -p projects/library-2/ng-package.json -c projects/library-2/tsconfig.build.json