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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:12:22