跳转到内容

在 Pier 中使用 pnpm

pnpm 从 .npmrc 读取仓库配置——与 npm 使用的是同一个文件。身份验证语义与 npm 一致(每个请求都发送 bearer),因此与 yarn 1 不同,pnpm 无需 always-auth=true 即可正常工作。

.npmrc
registry=https://YOUR-PIER-HOST/registry/npm/
//YOUR-PIER-HOST/registry/npm/:_authToken=pier_npm_…
always-auth=true

对 pnpm 而言,always-auth=true可选的——它无害,并且如果你在同一项目中也使用 yarn 1,则推荐保留。

Terminal window
pnpm install
pnpm add left-pad
pnpm add @your-org/internal-lib
pnpm add -D typescript # devDependency
Terminal window
pnpm publish
pnpm publish --tag beta
pnpm publish --no-git-checks # 在 CI 中跳过工作树洁净检查

对于 pnpm 工作区,将 .npmrc 放在工作区根目录——每个包都会继承它。无需为每个包重复配置。

my-monorepo/
├── .npmrc ← 放在这里
├── package.json
├── pnpm-workspace.yaml
└── packages/
├── app/package.json
└── lib/package.json

如果某个包需要使用不同的仓库,可在其 package.json 旁放置一个 .npmrc——pnpm 会沿目录向上查找并使用最近的那个。

在 pnpm 安装完成后列出 node_modules/ 时,你会看到 node_modules/.pnpm/,其中包含实际的内容寻址存储。顶层依赖是指向其中的符号链接。这是有意为之的,不会影响 Pier——包仍然通过同一套 HTTP API 请求。

pnpm 版本状态说明
9开箱即用
10开箱即用

通过 package.json 中的 packageManager 固定版本,以便 corepack 使用正确的版本:

{
"packageManager": "[email protected]"
}
  • ERR_PNPM_FETCH_401——令牌已吊销或缺失。请在 Packages → Manage tokens 中签发一个新的。
  • ERR_PNPM_FETCH_404——上游代理已关闭,且该包未私有发布。请在 Packages → Upstream proxy 中开启它。
  • ERR_PNPM_INTEGRITY_CHECK_FAILED——Pier 存储的 tarball 与其 sha512 不同步。很少见;通常由手动修改文件系统导致。解决办法:rm /opt/pier/data/registry/<pkg>/<file>.tgz 然后重新安装(Pier 会以正确的完整性校验重新获取)。