这个问题似乎遍布GitHub的NX存储库,但我无法在那里找到任何工作解决方案。
我的工作空间包含两个可构建库:ui/avatar
和ui/icon
以及一个可发布库,名为bar
我们的想法是使用ui/avatar
和ui/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/bar
的package.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"]
}
}
任何提示将不胜感激:)
1条答案
按热度按时间1dkrff031#
最终,考虑到这个问题仍然没有解决,我决定编写一个自定义的Nx执行器来完成这项工作。我会在这里分享它,也许它可以帮助其他人。
您可以从这里通过npm安装executor https://www.npmjs.com/package/@altack/nx-bundlefy
源代码也可以在Github上找到:https://github.com/altack/nx-bundlefy