pnpm publish 时怎么指定 registry? 令狐筱萌 提问于 2026-03-01 11:52:19 阅读 4 工具 我用 pnpm 开发了一个组件库,想发布到公司私有 npm 仓库,但执行 pnpm publish 总是默认推送到官方 registry,试过加 –registry 参数好像没生效,是不是 pnpm 的用法不一样? 我的 .npmrc 里已经配了 registry,但 publish 还是走的公网,有没有人遇到过类似问题? 发布流程 我来解答 赞 4 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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,一劳永逸,省得每次发版都提心吊胆。 回复 点赞 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 发请求,省得每次都真发布来调试。 回复 点赞 1 2026-03-01 12:04 加载更多 相关推荐 2 回答 3 浏览 pnpm audit 报告高危漏洞,但不知道怎么修复? 我用 pnpm 管理项目依赖,今天运行 pnpm audit 时提示有个高危漏洞,说是 axios 版本太低。但我明明在 package.json 里写的是 "axios": "^1.6.0",也重新... 长孙美菊 安全 2026-03-01 15:14:19 1 回答 6 浏览 Docker推送镜像到私有Registry时认证失败怎么办? 我在本地搭了个私有Docker Registry,用docker push的时候一直报“unauthorized: authentication required”,明明已经用docker login... Tr° 春萍 工具 2026-03-01 01:56:22 2 回答 50 浏览 pnpm workspace里共享样式包时路径怎么配置都不对? 最近在用pnpm workspace管理项目,把公共样式抽到一个包里,然后在子项目里用@import引用。但不管怎么改路径都报404,比如在子项目的style.css里这样写: @import '~@... ლ沐岩 前端 2026-02-07 13:16:35 2 回答 59 浏览 Vue项目迁移到pnpm后第三方组件报错,依赖版本冲突怎么排查? 刚把Vue3项目从npm迁移到pnpm,安装依赖后运行时报错"Cannot read properties of undefined (reading 'map')"。这个错误出现在我用的第三方组件@... 皇甫振莉 工具 2026-02-06 20:04:28 1 回答 4 浏览 pnpm 安装依赖后为什么有些包在 node_modules 里找不到? 我最近从 yarn 切到 pnpm,执行 pnpm install 后发现一些依赖比如 lodash 在 node_modules 里直接搜不到,但项目又能正常运行。这是不是 pnpm 的硬链接机制导... 东方熙炫 工具 2026-03-02 01:42:20 2 回答 9 浏览 pnpm 为什么分析依赖时显示的包和实际安装的不一致? 我用 pnpm 安装了一个包,但通过 pnpm why lodash 查看依赖关系时,发现它显示的版本和 node_modules 里实际链接的版本不一样,这是为啥? 我试过删掉 node_modul... 南宫丽苹 工具 2026-02-24 21:23:19 2 回答 35 浏览 npm/yarn/pnpm切换Nexus仓库源时如何避免重复下载包? 我在公司项目里用Nexus搭建了私有npm仓库,平时用npm config set registry切换内外网源。但发现每次切换回公共仓库后,之前通过Nexus下载的包还会重复下载,缓存好像没起作用。... 慕容世昌 工具 2026-02-17 11:45:28 2 回答 74 浏览 为什么pnpm install后package.json里的依赖版本和lock文件不一致? 用pnpm安装依赖时发现奇怪的问题,我按照惯例在package.json里写了"axios": "^1.6.2",但执行pnpm install后,生成的pnpm-lock.yaml里显示axios版... 书生シ春艳 工具 2026-02-10 19:26:26 2 回答 40 浏览 为什么用pnpm优化依赖后React组件样式失效了? 我最近把项目从npm切换成pnpm,执行了pnpm install --store-dir优化依赖,但发现React组件的CSS样式全都不生效了。 比如这个按钮组件: import styles fr... 东方紫瑶 工具 2026-02-01 19:25:26 2 回答 59 浏览 子包依赖在父项目中无法识别,pnpm workspace配置哪里出问题了? 我在用pnpm workspace管理monorepo项目,子包里安装了@tailwindcss/forms,但父项目编译时一直报错找不到这个模块,搞了一下午没解决。结构是这样的: { "worksp... 小莆泽 工具 2026-01-30 09:38:31
先说最直接的解决方案,在 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 发请求,省得每次都真发布来调试。