gpt4 book ai didi

angular - 有没有更好的方法来构建带有库的 Angular monorepo 应用程序?

转载 作者:行者123 更新时间:2023-12-02 14:29:36 27 4
gpt4 key购买 nike

我的 Angular monorepo 项目中有几个应用程序。此外,我还编写了大约 5 个可在应用程序中使用的库。

我想知道的是如何更好地构建/架构这些库

ins如下:

  1. 库仅供内部使用(意味着除了 projects 文件夹中的应用外,不得在其他应用中发布或使用)
  2. 库具有不同的依赖项,例如 lodashRxJs
  3. 一个库可以在其内部导入另一个库

到目前为止我做了什么:

  1. 在每个库的 ng-package.json 中指定 umdModuleIds
  2. lodashRxJs 等外部库上指定 peerDependency
  3. 设置我的应用构建,其中包含大约 5 个通过“&&”组合的 ng build lib-name 命令的 prebuild
  4. 我以下一种方式导入 Lodash import {cloneDeep } from 'lodash'

现在我看到我的 main.js block 比将一些服务/组件/函数提取到外部库之前大得多。现在,main.js 在产品版本中的大小为 2.1 Mb,在我看来太大了。

此外,我不确定是否值得为每个库制作 3 个不同的版本(UMD、FESM2015、FESM5)。

我按照文档中的建议从 dist 文件夹导入库,遵循下一个表单 import { LibService } from 'lib'

最佳答案

Nrwl由 Angular 核心贡献者开发的工具专门研究企业架构,包括单一存储库。

Nrwl nx-examples是一个很好的入门资源。

我首先使用 nx 构建一个新项目。最终我的项目结构如下:

platform-directory/
|
---apps/
| |
| ---app1/
| |
| ---app2/
|
---library1/
| |
| ---src/
|
---library2/
| |
| ---src/
|
---angular.json
|
---package.json
|
---README.md
|
---tsconfig.json

tsconfig.json

顶级tsconfig.json应包含应用程序和库的大部分全局配置以及路径快捷方式(如果需要)。

路径快捷方式可以配置如下:

{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "./",
"declaration": false,
"downlevelIteration": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"module": "esnext",
"moduleResolution": "node",
"sourceMap": true,
"target": "es6",
"lib": [
"es2018",
"dom"
],
"paths": {
"@app1*": [
"./apps/app1/src/app*"
],
"@lib1/package1": [
"./lib1/src/package1/public_api.ts"
],
"@lib1/package2": [
"./lib1/src/package2/public_api.ts"
],
...
}

库导入

在应用程序中,可以直接从库源导入库代码,例如:

import { MyLibraryComponent } from '@lib1/package1'

由于您不发布库,因此无需构建它们。当您在应用程序代码上运行 Angular 编译器时,库代码将根据需要自动包含和优化。

重要:在每个库中,不要使用路径快捷方式导入文件,因为这会导致难以调试的循环依赖关系。例如,在 lib2 中可以使用:

import { MyLibraryComponent } from '@lib1/package1'

但是,如果在 lib1 中使用此导入,则会创建循环依赖项。

顺便说一句,每个应用程序都会有一个 tsconfig.app.jsontsconfig.spec.json ,如下所示:

{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc/apps/app1"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}

关于angular - 有没有更好的方法来构建带有库的 Angular monorepo 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com