pnpm publish 时怎么指定 registry? 令狐筱萌 提问于 2026-03-01 11:52:19 阅读 36 工具 我用 pnpm 开发了一个组件库,想发布到公司私有 npm 仓库,但执行 pnpm publish 总是默认推送到官方 registry,试过加 –registry 参数好像没生效,是不是 pnpm 的用法不一样? 我的 .npmrc 里已经配了 registry,但 publish 还是走的公网,有没有人遇到过类似问题? 发布流程 我来解答 赞 13 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 ___建英 Lv1 这问题我之前踩过坑,pnpm 和 npm 在 publish 这块行为确实不太一样。 先说最直接的解决方案,在 package.json 里加 publishConfig: { "publishConfig": { "registry": "https://your-private-registry.com/" } } 这个优先级最高,比命令行参数和 .npmrc 都管用,推荐用这个方式。 你说的 --registry 参数没生效,大概率是写法问题。正确写法是: pnpm publish --registry=https://your-private-registry.com/ 注意等号中间不能有空格,有空格的话参数就丢了。 再说 .npmrc 的问题,很多人配的是全局 registry,这个只对 install 生效。publish 的时候 pnpm 会查好几个地方的配置,优先级是 package.json 的 publishConfig > 命令行参数 > 项目级 .npmrc > 用户级 .npmrc。 如果你的包是 scoped package,比如 @company/my-lib,可以在 .npmrc 里针对 scope 单独配: @company:registry=https://your-private-registry.com/ 这样 install 和 publish 都会走私有仓库。 还有个坑,如果你之前登录过 npm 官方仓库,本地可能存了官方的 token,publish 的时候可能会用错身份认证。可以跑一下 pnpm whoami 看看当前登录的是哪个 registry,不对的话就用 pnpm logout 退掉重新登录私有仓库。 建议直接用 publishConfig,一劳永逸,省得每次发版都提心吊胆。 回复 点赞 3 2026-03-02 15:24 UP主~淑丽 Lv1 问题应该出在 pnpm 对于安装和发布使用的 registry 是分开管理的。.npmrc 里配的 registry 默认只管安装依赖,发布时需要单独指定。 最靠谱的方式是在 package.json 里加 publishConfig,这样最明确: { "name": "your-component-lib", "version": "1.0.0", "publishConfig": { "registry": "https://your-company-registry.com/" } } 加了这个之后 pnpm publish 就会乖乖往你指定的私有仓库推了。 如果非要用命令行参数,语法是这样的: pnpm publish --registry=https://your-company-registry.com/ 注意等号两边不能有空格,我之前也踩过这个坑,写了空格参数就失效了。 还有个容易忽略的点,如果你的包是 scoped package(比如 @company/xxx),需要在 .npmrc 里单独配置 scope 对应的 registry: @company:registry=https://your-company-registry.com/ 另外排查的时候可以加 --dry-run 参数先看下发布配置对不对,不会真的推上去: pnpm publish --dry-run 这样能看到具体会往哪个 registry 发请求,省得每次都真发布来调试。 回复 点赞 3 2026-03-01 12:04 加载更多 相关推荐 1 回答 38 浏览 为什么 pnpm 安装的包在 npm registry 上找不到? 我用 pnpm 装一个叫 @myorg/utils 的包,提示 404 找不到,但同事用 npm 就能装上。是不是 pnpm 默认不走 npm registry?我试过加 --registry 参数也... 程序猿亚龙 工具 2026-03-24 17:30:21 1 回答 30 浏览 用 pnpm 发包时怎么指定入口文件? 我最近用 pnpm 开发了一个 React 组件库,本地测试没问题,但发布到私有 npm 仓库后,别人安装使用时报错说找不到模块。我怀疑是 package.json 里的入口配置不对,但不确定该改 m... ♫青霞 工具 2026-03-12 19:32:19 1 回答 41 浏览 Monorepo 中 pnpm 安装依赖后子项目找不到公共组件怎么办? 我在用 pnpm 搭建的 monorepo 项目里,把公共 UI 组件放到了 packages/ui 目录下,其他子应用通过 workspace:* 引用。但运行时一直报模块找不到,本地开发完全跑不起... 码农炳錦 工具 2026-03-21 22:43:18 2 回答 38 浏览 Docker推送镜像到私有Registry时认证失败怎么办? 我在本地搭了个私有Docker Registry,用的是HTTP(没配HTTPS),也加了insecure-registries配置。但每次执行 docker push my-registry:500... 西门耘郗 工具 2026-03-20 18:29:21 1 回答 42 浏览 Docker推送镜像到私有Registry时认证失败怎么办? 我本地搭了个私有Docker Registry,用的是官方的registry:2镜像,也配了HTTPS。但当我执行docker push my-registry.local:5000/my-app的时... 奥翔 Dev 工具 2026-03-19 08:33:20 2 回答 35 浏览 pnpm-lock.yaml 里有高危依赖,但项目里根本没用到,要怎么处理? 我用 GitHub Dependabot 扫描项目,发现 pnpm-lock.yaml 里有个依赖被标成高危漏洞,但我在 package.json 里完全没装这个包,应该是某个子依赖带进来的。现在 C... 程序员文华 安全 2026-03-06 14:38:20 2 回答 45 浏览 pnpm workspace 里怎么正确引用本地包? 我在用 pnpm workspace 搭建 monorepo,主应用想引入另一个 package 里的组件,但总是报模块找不到。 我已经在根目录的 pnpm-workspace.yaml 里配置了 p... FSD-鑫平 前端 2026-03-06 09:54:22 2 回答 23 浏览 pnpm install 后依赖没装全是怎么回事? 我用 pnpm 装依赖,但有些包明明在 package.json 里,install 完却没出现在 node_modules 里,运行时报找不到模块。 比如我装了 lodash,但 import 的时... Mc.彦会 工具 2026-03-04 20:41:19 2 回答 77 浏览 pnpm audit 报告高危漏洞但不知道怎么修复怎么办? 我用 pnpm 管理项目依赖,今天运行 pnpm audit 时发现好几个高危漏洞,但提示信息太模糊了,根本不知道该升级哪个包或者怎么处理。 比如它说某个间接依赖有原型污染问题,但我查了 packag... UE丶米阳 安全 2026-03-03 19:48:20 2 回答 25 浏览 pnpm audit 报告高危漏洞,但不知道怎么修复? 我用 pnpm 管理项目依赖,今天运行 pnpm audit 时提示有个高危漏洞,说是 axios 版本太低。但我明明在 package.json 里写的是 "axios": "^1.6.0",也重新... 长孙美菊 安全 2026-03-01 15:14:19
先说最直接的解决方案,在 package.json 里加
publishConfig:这个优先级最高,比命令行参数和 .npmrc 都管用,推荐用这个方式。
你说的
--registry参数没生效,大概率是写法问题。正确写法是:注意等号中间不能有空格,有空格的话参数就丢了。
再说 .npmrc 的问题,很多人配的是全局 registry,这个只对 install 生效。publish 的时候 pnpm 会查好几个地方的配置,优先级是 package.json 的 publishConfig > 命令行参数 > 项目级 .npmrc > 用户级 .npmrc。
如果你的包是 scoped package,比如
@company/my-lib,可以在 .npmrc 里针对 scope 单独配:这样 install 和 publish 都会走私有仓库。
还有个坑,如果你之前登录过 npm 官方仓库,本地可能存了官方的 token,publish 的时候可能会用错身份认证。可以跑一下
pnpm whoami看看当前登录的是哪个 registry,不对的话就用pnpm logout退掉重新登录私有仓库。建议直接用 publishConfig,一劳永逸,省得每次发版都提心吊胆。
最靠谱的方式是在 package.json 里加 publishConfig,这样最明确:
加了这个之后 pnpm publish 就会乖乖往你指定的私有仓库推了。
如果非要用命令行参数,语法是这样的:
注意等号两边不能有空格,我之前也踩过这个坑,写了空格参数就失效了。
还有个容易忽略的点,如果你的包是 scoped package(比如 @company/xxx),需要在 .npmrc 里单独配置 scope 对应的 registry:
另外排查的时候可以加
--dry-run参数先看下发布配置对不对,不会真的推上去:这样能看到具体会往哪个 registry 发请求,省得每次都真发布来调试。