You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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目录内的正确文件,比如:
    "main": "index.js",
    "types": "index.d.ts"
    
    (发布时从dist目录读取文件,路径无需加dist前缀)
  • 若需跳过发布前的构建检查,可添加--no-build参数,但建议先完成构建再发布。

内容的提问来源于stack exchange,提问作者Shaun Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:28