Yarn 2中如何从dist目录发布TypeScript monorepo工作区包
解决Yarn 2 TypeScript Monorepo发布编译产物到GitHub npm Registry的问题
下面是具体的配置步骤,确保发布的是./dist下的编译产物而非源码:
1. 配置单个包的package.json
针对每个需要发布的包(位于./packages/*下),修改其package.json:
- 指定入口文件指向dist目录:明确编译后的产物路径,比如:
{ "main": "./dist/index.js", "module": "./dist/index.esm.js", "types": "./dist/index.d.ts" } - 限制发布文件范围:通过
files字段只包含dist和必要的元文件,避免源码被打包:{ "files": [ "dist", "package.json", "README.md", "LICENSE" ] } - 确保包非私有:将
private字段设为false(私有包保持true,不会被发布):{ "private": false }
2. 配置编译前置脚本
在每个要发布的包的package.json中添加prepare脚本,保证发布前自动完成TypeScript编译:
{ "scripts": { "prepare": "tsc", "build": "tsc" } }
prepare脚本会在yarn install和yarn npm publish时自动执行,确保发布前dist目录已生成最新产物。
3. 精准执行发布命令
如果只需要发布部分包,执行命令时指定具体包路径,同时指定访问权限(公开包需加--access public):
yarn npm publish packages/your-package-name --access public
4. 预验证发布内容(可选但推荐)
发布前可以先执行pack命令生成压缩包,解压后确认内容是否符合预期:
yarn npm pack packages/your-package-name
解压生成的.tgz文件,检查里面是否只有dist目录和你指定的元文件。
5. 配置GitHub npm Registry访问
在项目根目录的.yarnrc.yml中添加GitHub Registry的配置(替换为你的GitHub用户名):
npmScopes: your-github-username: npmRegistryServer: "https://npm.pkg.github.com" npmAlwaysAuth: true npmAuthToken: "${GITHUB_TOKEN}"
同时在要发布的包的package.json中设置对应的scope:
{ "name": "@your-github-username/your-package-name" }
确保环境变量GITHUB_TOKEN已配置,且包含write:packages权限。
内容的提问来源于stack exchange,提问作者pckben
相关产品推荐
相关产品推荐

