【问题标题】:Angular mono-repo library making using ng-packagr使用 ng-packagr 制作 Angular mono-repo 库
【发布时间】:2021-07-17 09:29:17
【问题描述】:

我的 Angular 应用程序具有以下 mono repo 文件夹结构。

我在 app1/app2 中使用 library1 和 library2,同时将这两个库分别发布为 .tgz 以供其他 Angular 应用程序使用。

我正在使用 ng-packagr 以 Angular 包格式 (APF) 编译和打包 Angular 库。

使用以下命令创建库:

   **ng build --library1**

   **npm pack**

在目录/angular.json

"projects": {
     "library1": {
        "root": "libs/library1",
        "sourceRoot": "libs/library1/src",
        "projectType": "library",
        "prefix": "library1",
        "architect": {
            "build": {
                "builder": "@angular-devkit/build-ng-packagr:build",
                "options": {
                    "tsConfig": "libs/library1/tsconfig.lib.json",
                    "project": "libs/library1/ng-package.json"
                },
                "configurations": {
                    "production": {
                        "project": "libs/library1/ng-package.prod.json"
                    }
                }
            }
            }

在目录/libs/library1/ng-package.json

{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/libs/library1",
"lib": {
    "entryFile": "src/index.ts"
}
}

我需要什么:

  1. 现在我想结合 library1 和 library 2 来创建一个单独的库,可能是 libraryAll(libraryAll.tgz),它将导出 libray1 和 library 2。

  2. 我还需要一个共享模块,该模块将被两个库使用,并将成为最终库包的一部分。

【问题讨论】:

  • 您可以创建GitSubmodule 功能,这样您就可以创建具有通用功能的新的单独repo,并且可以在必要时包含它
  • 是的,我可以这样做,但它需要再次发布各个库的不同版本

标签: angular build monorepo ng-packagr


【解决方案1】:

感谢您的所有建议。

我使用 ng packagr 辅助入口点功能解决了这个问题。

library 1 中,我使用现有的 library 2 并创建了另一个共享库 library 3

现在我可以发布 libraryAll 的包,包括 libray 1、libray 2 和 libray 3。

我还可以发布单个库。

ng packagr secondary point

我遇到的唯一主要障碍是库 1 和库 2 中库 (library-3) 的导入路径引发构建错误,我遇到了 rootDir 问题,因为路径位于入口点文件夹之外。我实现的解决方案是从节点模块导入它并发布最终库。

下面的链接将解释二级入口点结构。

目前的结构是

【讨论】:

    【解决方案2】:

    要将两个库合并为一个,我建议您创建第三个库,导入前两个库并使用不同的 index.ts 公开它。 如果您想以各种方式单独维护它。

    第一个库和第二个库都需要编译才能被第三个库使用和公开。

    例如。导出 Library1Module 和 Library2Module 的 LibraryAllModule。

    index.ts 看起来像:

    export { LibraryAllModule } from './libs/libraryAll/library-all.module';
    export { Library1Module } from './libs/library1/library1.module';
    export { Library2Module } from './libs/library2/library2.module';
    

    或者另一种方法是将两个库中的代码报告到按模块划分的新库中。

    index.ts 将如下所示:

    export { LibraryAllModule } from './libs/libraryAll/library-all.module';
    export { Library1Module } from './libs/libraryAll/library1/library1.module';
    export { Library2Module } from './libs/libraryAll/library2/library2.module';
    

    通过将这 2 个库合并到一个公共库中,您还可以更轻松地创建一个公共模块以在两者之间共享。您可以在“libraryAll”文件夹中声明它,然后将其导入两个库中。

    【讨论】:

      【解决方案3】:

      我认为首先你需要创建 Angular 提供的多项目结构。您可以通过ng generate libng generate application 命令生成库和应用程序。

      然后,您可以为您的库打包。查看更多信息:https://izifortune.com/multiple-packages-repository-with-angular/

      【讨论】:

      • 我已经在使用库并遵循 mono repo 方法,但这不是我的问题。请再次检查我的问题。
      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 2020-10-14
      • 2018-06-09
      • 2018-11-13
      • 2021-06-04
      • 2018-04-12
      • 2018-03-08
      • 2021-09-18
      相关资源
      最近更新 更多