如何构建依赖Yarn工作区其他包的独立程序包
TypeScript单体仓库单包部署的简洁方案
方法1:用@manypkg/cli一键导出可部署单包
这是最省心的方案,专门针对monorepo的单包导出场景,自动处理内部依赖替换:
- 安装依赖:
yarn add -D @manypkg/cli - 在项目根目录的
package.json中添加导出配置:{ "manypkg": { "exportMap": { "your-target-package": "./dist-deploy" } } } - 执行导出命令:
yarn manypkg export your-target-package
命令执行后,dist-deploy目录会包含目标包的构建产物,以及自动修正后的package.json——内部依赖的workspace:*会被替换为对应包的实际版本号,外部依赖保持原样。直接将这个目录作为独立包部署,执行npm i即可安装所有所需依赖。
方法2:基于现有流程优化脚本(无额外工具)
如果不想引入新工具,可以用轻量命令简化现有脚本逻辑:
- 先构建目标包及其依赖:
tsc --build packages/your-target-package/tsconfig.json - 复制目标包的构建产物到部署目录:
cp -r packages/your-target-package/dist ./dist-deploy - 用
jq快速修正package.json的内部依赖(需提前安装jq):
把jq '.dependencies |= with_entries(if .value | startswith("workspace:") then .value = "1.0.0" else . end)' packages/your-target-package/package.json > ./dist-deploy/package.json1.0.0替换为对应内部包的实际版本号即可。处理后的package.json保留所有外部依赖,内部依赖改为可通过npm安装的版本,直接部署dist-deploy目录即可。
方法3:基于TS Project References的本地依赖部署
如果内部包无需发布到npm,可直接复用构建后的产物:
- 执行
tsc --build构建所有相关包的产物 - 将目标包和所有依赖的内部包的
dist目录复制到同一个部署目录下,比如:deploy/ your-target-package/ dist/ package.json internal-package-a/ dist/ package.json - 修改目标包的
package.json,将内部依赖改为相对路径:
部署时直接在"@your-org/internal-package-a": "../internal-package-a"your-target-package目录下执行npm i,即可正常安装外部依赖,同时通过相对路径引用内部包的构建产物。
关键注意点
- 确保所有内部包的
package.json中,main、module、types字段正确指向构建产物的路径 - 若内部包需通过npm安装,需提前将其发布到私有或公共npm源
内容的提问来源于stack exchange,提问作者Vitor EL
相关产品推荐
相关产品推荐

