在 Pier 中使用 pnpm
pnpm 从 .npmrc 读取仓库配置——与 npm 使用的是同一个文件。身份验证语义与 npm 一致(每个请求都发送 bearer),因此与 yarn 1 不同,pnpm 无需 always-auth=true 即可正常工作。
registry=https://YOUR-PIER-HOST/registry/npm///YOUR-PIER-HOST/registry/npm/:_authToken=pier_npm_…always-auth=true对 pnpm 而言,always-auth=true 是可选的——它无害,并且如果你在同一项目中也使用 yarn 1,则推荐保留。
安装 / 添加
Section titled “安装 / 添加”pnpm installpnpm add left-padpnpm add @your-org/internal-libpnpm add -D typescript # devDependencypnpm publishpnpm publish --tag betapnpm 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 符号链接群
Section titled “.pnpm 符号链接群”在 pnpm 安装完成后列出 node_modules/ 时,你会看到 node_modules/.pnpm/,其中包含实际的内容寻址存储。顶层依赖是指向其中的符号链接。这是有意为之的,不会影响 Pier——包仍然通过同一套 HTTP API 请求。
| pnpm 版本 | 状态 | 说明 |
|---|---|---|
| 9 | ✓ | 开箱即用 |
| 10 | ✓ | 开箱即用 |
通过 package.json 中的 packageManager 固定版本,以便 corepack 使用正确的版本:
{}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 会以正确的完整性校验重新获取)。