npm 如何发布捆绑了依赖项的NX库?

k7fdbhmy  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(394)

这个问题似乎遍布GitHub的NX存储库,但我无法在那里找到任何工作解决方案。
我的工作空间包含两个可构建库:ui/avatarui/icon以及一个可发布库,名为bar
我们的想法是使用ui/avatarui/icon作为内部monorepo库(例如这些可以直接导入到应用程序中),但我也想将这两个可构建的库封装到bar中,并将bar作为npm包发布,以便外部消费者可以从中受益。
下面是文件结构的一般概述:

📦libs
 ┣ 📂external
 ┃ ┗ 📂bar
 ┃ ┃ ┣ 📂src
 ┃ ┃ ┃ ┣ 📂lib
 ┃ ┃ ┃ ┃ ┗ 📜external-bar.module.ts
 ┃ ┃ ┣ 📜ng-package.json
 ┃ ┃ ┣ 📜package.json
 ┃ ┃ ┣ 📜project.json
 ┃ ┃ ┣ 📜tsconfig.json
 ┣ 📂ui
 ┃ ┣ 📂avatar
 ┃ ┃ ┣ 📂src
 ┃ ┃ ┃ ┣ 📂lib
 ┃ ┃ ┃ ┃ ┣ 📂avatar
 ┃ ┃ ┃ ┃ ┃ ┗ 📜avatar.component.ts
 ┃ ┃ ┃ ┃ ┗ 📜ui-avatar.module.ts
 ┃ ┃ ┃ ┣ 📜index.ts
 ┃ ┃ ┣ 📜ng-package.json
 ┃ ┃ ┣ 📜package.json
 ┃ ┃ ┣ 📜project.json
 ┃ ┃ ┣ 📜tsconfig.json
 ┃ ┗ 📂icon
 ┃ ┃ ┣ 📂src
 ┃ ┃ ┃ ┣ 📂lib
 ┃ ┃ ┃ ┃ ┣ 📂icon
 ┃ ┃ ┃ ┃ ┃ ┗ 📜icon.component.ts
 ┃ ┃ ┃ ┃ ┗ 📜ui-icon.module.ts
 ┃ ┃ ┃ ┣ 📜index.ts
 ┃ ┃ ┣ 📜ng-package.json
 ┃ ┃ ┣ 📜package.json
 ┃ ┃ ┣ 📜project.json
 ┃ ┃ ┗ 📜tsconfig.json

最初的部分,工作。
我能够将ui/avatar导入到bar中并生成@blue/bar包。问题是生成的@blue/barpackage.json看起来如下:

{
  "name": "@blue/bar",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^14.1.0",
    "@angular/core": "^14.1.0",
    "@blue/ui-avatar": "0.0.1" <-- this!!
  },
  "dependencies": {
    "tslib": "^2.3.0"
  },
  "module": "esm2020/blue-bar.mjs",
  "es2020": "esm2020/blue-bar.mjs",
  "esm2020": "esm2020/blue-bar.mjs",
  "typings": "index.d.ts",
  "exports": {
    "./package.json": {
      "default": "./package.json"
    },
    ".": {
      "types": "./index.d.ts",
      "es2020": "./esm2020/blue-bar.mjs",
      "esm2020": "./esm2020/blue-bar.mjs",
      "default": "./esm2020/blue-bar.mjs"
    }
  },
  "sideEffects": false
}

生成的包,期望ui/avatar是一个现有的 npm包 (因此存在于一些注册表中),但我真正需要的是将ui/avatar捆绑为@blue/bar**包的一部分,而不是作为第三方依赖项。
我尝试调整bar库的tsconfig.json文件,以某种方式尝试在本地解决依赖关系(使用paths),但似乎不起作用。

"compilerOptions": {
    "declarationMap": false,
    "paths": {
      "@blue/ui-avatar": ["libs/ui/avatar/src/index.ts"],
      "@blue/ui-icon": ["libs/ui/icon/src/index.ts"]
    }
  }

任何提示将不胜感激:)

1dkrff03

1dkrff031#

最终,考虑到这个问题仍然没有解决,我决定编写一个自定义的Nx执行器来完成这项工作。我会在这里分享它,也许它可以帮助其他人。
您可以从这里通过npm安装executor https://www.npmjs.com/package/@altack/nx-bundlefy
源代码也可以在Github上找到:https://github.com/altack/nx-bundlefy

相关问题