Angular 工作区 - 我可以在多个 package.json 中分离依赖项吗?
Angular workspace - Can I seperate dependencies in multiple package.json?
Angular 工作区允许我使用将多个项目添加到单一存储库中,这很棒。但是,在与多个团队合作时,我注意到如果您只有一个 package.json 并让每个团队使用他们正在编写的应用程序对其进行编辑,它会变得非常混乱。
是否可以有这样的结构?
|── angular.json
├── browserslist
├── e2e
├── karma.conf.js
├── node_modules
├── package.json <--- I should only be responsible for everything in /src
├── package-lock.json
├── projects
│ └── my-sub-application
│ ├── browserslist
│ ├── karma.conf.js
│ ├── package.json <--- Is this possible? So that "my-sub-application" only pulls its dependencies from this package.json?
│ ├── src
│ │ ├── app
│ │ ├── assets
│ │ ├── environments
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles.scss
│ │ └── test.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── README.md
├── src
│ ├── app
│ ├── assets
│ ├── environments
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.scss
│ └── test.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── tslint.json
想法是为每个子应用程序设置一个 package.json,因为它允许团队独立更新它们的依赖项。那可能吗?
我认为答案是"yes and no"。
只要您想继续使用一个应用程序(一个构建,一个工件),那么答案是否定的。
但是,如果您的团队正在处理不同的、独立的功能,则可能值得考虑创建多个库 (https://angular.io/guide/creating-libraries)。
每个库都有自己的 package.json。但在你执行这一步之前,我认为你应该分析你的依赖结构(和业务用例),以确保未来库的代码不依赖于它之外的东西。
你可以有一种依赖树(主应用程序使用 Lib-A 和 Lib-B,Lib-A 和 Lib-B 使用 Lib-C,...)但是你应该检查没有循环依赖,并且 "lower" 库不应该依赖于 "higher" 库。
使用库的方法对开发过程有重大影响。不同的构建过程,更加分割/分离的代码库,它可能会以多种方式影响代码设计,...
所以这不是一个小的变化。但它也给了你很多优点。
因此,一个库可以获得新版本,而应用程序的其他部分仍将使用旧版本,直到这些团队准备好进行升级。库的分离使整个应用程序不易损坏,因为库只会通过定义的接口相互通信。 ...
所以是的,您可以有多个 package.json。但这就像拥有多个小项目一样。具有所有优点和缺点。
Angular 工作区允许我使用将多个项目添加到单一存储库中,这很棒。但是,在与多个团队合作时,我注意到如果您只有一个 package.json 并让每个团队使用他们正在编写的应用程序对其进行编辑,它会变得非常混乱。
是否可以有这样的结构?
|── angular.json
├── browserslist
├── e2e
├── karma.conf.js
├── node_modules
├── package.json <--- I should only be responsible for everything in /src
├── package-lock.json
├── projects
│ └── my-sub-application
│ ├── browserslist
│ ├── karma.conf.js
│ ├── package.json <--- Is this possible? So that "my-sub-application" only pulls its dependencies from this package.json?
│ ├── src
│ │ ├── app
│ │ ├── assets
│ │ ├── environments
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles.scss
│ │ └── test.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── README.md
├── src
│ ├── app
│ ├── assets
│ ├── environments
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.scss
│ └── test.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── tslint.json
想法是为每个子应用程序设置一个 package.json,因为它允许团队独立更新它们的依赖项。那可能吗?
我认为答案是"yes and no"。
只要您想继续使用一个应用程序(一个构建,一个工件),那么答案是否定的。
但是,如果您的团队正在处理不同的、独立的功能,则可能值得考虑创建多个库 (https://angular.io/guide/creating-libraries)。
每个库都有自己的 package.json。但在你执行这一步之前,我认为你应该分析你的依赖结构(和业务用例),以确保未来库的代码不依赖于它之外的东西。
你可以有一种依赖树(主应用程序使用 Lib-A 和 Lib-B,Lib-A 和 Lib-B 使用 Lib-C,...)但是你应该检查没有循环依赖,并且 "lower" 库不应该依赖于 "higher" 库。
使用库的方法对开发过程有重大影响。不同的构建过程,更加分割/分离的代码库,它可能会以多种方式影响代码设计,...
所以这不是一个小的变化。但它也给了你很多优点。
因此,一个库可以获得新版本,而应用程序的其他部分仍将使用旧版本,直到这些团队准备好进行升级。库的分离使整个应用程序不易损坏,因为库只会通过定义的接口相互通信。 ...
所以是的,您可以有多个 package.json。但这就像拥有多个小项目一样。具有所有优点和缺点。