如何在PNPM管理的TypeScript Monorepo中结合构建与发布流程?
解决方案
1. 配置TypeScript编译输出到dist目录
修改每个包的tsconfig.json,设置outDir为./dist,确保编译产物输出到对应包的dist文件夹:
// packages/lib/tsconfig.json { "compilerOptions": { "outDir": "./dist", "declaration": true, // 生成类型文件,方便其他包引用 // 其他TS配置... }, "include": ["src/**/*"] }
app包的tsconfig.json做同样配置即可。
2. 扩展构建脚本,复制必要文件到dist
修改每个包的package.json中的build脚本,在TS编译完成后,将package.json、README.md等发布所需文件复制到dist目录。推荐用跨平台的copyfiles工具:
先在根目录安装依赖:
pnpm add -D copyfiles -w
然后修改包的构建脚本:
// packages/lib/package.json "scripts": { "build": "tsc && copyfiles package.json README.md dist/" }
app包的脚本做同样修改。
3. 配置发布目录(可选但推荐)
在每个包的package.json中添加publishConfig字段,指定发布目录为dist:
// packages/lib/package.json "publishConfig": { "directory": "dist", "access": "public" // 公开包需添加此配置 }
app包做同样配置。
4. 按依赖顺序构建并发布
构建命令(自动处理依赖顺序)
在根目录执行,确保先构建被依赖的lib,再构建app:
pnpm -r build --filter @shaunxu/lib...@shaunxu/app
发布命令
直接在根目录执行批量发布,pnpm会自动替换dist目录下package.json中的workspace:依赖为实际版本号:
pnpm -r publish
额外注意事项
- 确保每个包的
package.json中main、types等字段指向dist目录内的正确文件,比如:
(发布时从dist目录读取文件,路径无需加dist前缀)"main": "index.js", "types": "index.d.ts" - 若需跳过发布前的构建检查,可添加
--no-build参数,但建议先完成构建再发布。
内容的提问来源于stack exchange,提问作者Shaun Xu
相关产品推荐
相关产品推荐

