跳到主要内容
pnpm
文档目录

pnpm publish

查看英文原文 ↗

将包发布到 registry。

pnpm [-r] publish [<tarball|folder>] [--tag <tag>]
     [--access <public|restricted>] [options]

工作区内发布包时,工作区根目录的 LICENSE 文件会随包一起打包(除非该包自带许可证)。

发布前,你可以通过 package.json 中的 publishConfig 字段覆盖部分字段。你还可以使用 publishConfig.directory 自定义要发布的子目录(通常配合第三方构建工具使用)。

递归运行此命令(pnpm -r publish)时,pnpm 会发布所有版本尚未发布到 registry 的包。

选项

--recursive, -r

发布工作区中的所有包。

--json

以 JSON 格式显示信息。

--tag

使用指定的 tag 发布包。默认情况下,pnpm publish 会更新 latest tag。

例如:

# inside the foo package directory
pnpm publish --tag next
# in a project where you want to use the next version of foo
pnpm add foo@next

--access <public|restricted>

告知 registry 发布的包应为公开还是受限。

--no-git-checks

不检查当前分支是否为发布分支、是否干净以及与远程是否保持同步。

--publish-branch

  • 默认值:mastermain
  • 类型:字符串

用于发布最新变更的仓库主分支。

--force

即使包的当前版本已存在于 registry 中,也尝试发布。

--batch

自 v11.7.0 起提供

递归发布(pnpm -r publish)时,将所有选中的包通过单个 PUT /-/pnpm/v1/publish 请求发送到 registry,而不是每个包一个请求。

目标 registry 必须实现批量发布端点(pnpr 已实现);未实现该端点的 registry 会报 ERR_PNPM_BATCH_PUBLISH_UNSUPPORTED 错误。批处理遵循全有或全无:只要批中任一包校验失败,所有包都不会发布。

自 v11.24.0 起,选中的包会按各自发布目标 registry 分组,每组发送一个请求。同组内的每个包必须使用同一凭据认证,共享同一个按 scope 配置的 token 即可;若某 registry 的凭据不匹配,会在任何内容发布之前就被拒绝,而不是在部分发布出去之后。每组完成后会运行 publishpostpublish 脚本。

--skip-manifest-obfuscation

自 v11.3.0 起提供

在发布的 manifest 中保留原始 packageManager 字段和发布生命周期脚本,而不是将其剥离。pnpm 专有的 pnpm 字段仍会被省略。

--report-summary

将已发布包列表保存到 pnpm-publish-summary.json。当需要借助其他工具报告已发布包列表时很有用。

pnpm-publish-summary.json 文件示例:

{
  "publishedPackages": [
    {
      "name": "foo",
      "version": "1.0.0"
    },
    {
      "name": "bar",
      "version": "2.0.0"
    }
  ]
}

--dry-run

执行发布所做的全部事情,但不实际发布到 registry。

--otp

发布需要双因素认证的包时,可用此选项指定一次性密码。

你也可以通过 PNPM_CONFIG_OTP 环境变量提供 OTP:

export PNPM_CONFIG_OTP='<your OTP here>'
pnpm publish --no-git-checks

如果 registry 要求 OTP,而你未通过环境变量或 --otp 标志提供,pnpm 会直接提示你输入 OTP 代码。

如果 registry 要求基于 Web 的认证,pnpm 会打印一个可扫描的二维码及 URL。

--provenance

从受支持的云 CI/CD 系统发布时,包会被公开链接到其构建与发布的来源位置。

--filter <package_selector>

Read more about filtering.

配置

你也可以在 pnpm-workspace.yaml 文件中设置 gitCheckspublishBranch 选项。

例如:

pnpm-workspace.yaml

gitChecks: false
publishBranch: production

生命周期脚本

  • prepublishOnly
  • prepublish
  • prepack
  • prepare
  • postpack
  • publish
  • postpublish

本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。