Bun 私有注册表配置指南:3 个场景 5 分钟跑通

📅 发布时间:2026/8/29 16:19:05
Bun 私有注册表配置指南:3 个场景 5 分钟跑通 Bun 私有注册表配置指南3 个场景 5 分钟跑通【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun周三下午两点CI 流水线卡在内部 npm 包下载上40 分钟没跑完。根因是 npm 镜像同步私有源有延迟公共源又拉不到acme/作用域下的包。把包管理器换成 Bun并在 bunfig.toml 里配好私有注册表后同样的流水线安装阶段只剩 40 秒。Bun 的私有注册表配置分两层一个默认源加一组按作用域划分的源下面按顺序过一遍。Bun 私有注册表核心概念速览名称作用备注install.registry默认注册表不配置时指向 npmjs.orginstall.scopes按作用域指定注册表键名不带前缀token/usernamepassword私有库认证支持$变量名引用环境变量.npmrc旧配置迁移入口Bun 按 npm 规则读取trustedDependencies生命周期脚本白名单Bun 默认禁止依赖执行脚本关系一句话讲清解析某个包时先查install.scopes里有没有它的作用域有就发请求到那个源没有才回落到install.registry认证信息按注册表的 host 和 path 匹配写在 bunfig 或.npmrc里都一样。Bun 私有注册表最小可用配置写入 bunfig.toml项目根目录已有bunfig.toml的话在[install]段追加即可没有就新建[install] # 默认源换成内部源公共包也从这里出 registry https://npm.acme.com/ [install.scopes] # 键名去掉 前缀token 写死只适合内网测试 acme { url https://npm.acme.com/, token npm_acme_123456 }保存后配置即刻生效不需要任何重载动作。安装一个私有包验证在项目根目录执行bun add acme/logger bun pm ls acme/logger看到acme/logger1.2.0出现在输出里说明私有源连通且认证通过。如果卡住或报 401直接跳到下面的排障章节。确认解析路径来自内部源用一条命令确认它没有偷偷走公共源grep npm.acme.com/acme bun.lock | head -n 2看到包含acme/logger和https://npm.acme.com/的行说明解析路径确实指向内部源。这一步在 CI 上跑一遍同样值得因为流水线环境读的是仓库里的 bunfig不是本机配置。按场景拆解配置单注册表加 Token 认证什么时候用私有包都集中在一个内部源且只用了acme一个作用域。[install.scopes] # token 用 $ 前缀引用环境变量避免把密钥写死提交进仓库 acme { url https://npm.acme.com/, token $ACME_TOKEN }配置完之后本机执行export ACME_TOKENnpm_acme_123456再安装即可。常见变体源是老的用户名密码认证token 换掉就行Bun 会自动做 base64 编码比.npmrc里手敲编码省事[install.scopes] # password 直接写明文Bun 负责编码 acme { url https://npm.acme.com/, username svc_ci, password $ACME_PASSWORD }参考bunfig.toml 文档多注册表优先级与冲突处理什么时候用内部源只代理了部分包其余作用域还得走公共源或者内部源是透明代理加私有库混合模式公共包全部走内部源当出口。[install] # 内部源兼做公网出口默认所有包都走它 registry https://npm.acme.com/ [install.scopes] # open 作用域的包只发布在公共源显式分流回去 open https://registry.npmjs.org/命中规则按作用域精确匹配优先否则回落到默认源执行不存在隐式的第三方源。常见变体内部源没有同步公网包时反向操作——install.registry指回 npmjs.org只把私有作用域放进install.scopes。两种写法本质相同区别只在于默认出口放哪边。CI 环境变量注入 Token什么时候用流水线跑安装令牌不能出现在代码库里。# bunfig 里写 $ACME_TOKEN流水线只负责把变量注入环境 ACME_TOKEN$NPM_TOKEN bun install --frozen-lockfile看到 acme/logger 1.2.0之类的安装输出且退出码为 0说明注入成功。常见变体GitHub Actions 的env字段里放ACME_TOKEN: ${{ secrets.NPM_TOKEN }}bunfig 内容对全团队保持一致密钥不进 git。Bun 私有注册表踩坑与排障401 Unauthorized 反复出现现象bun add或 CI 安装报 401重试无效。最常见原因有两个Token 过期或权限不足bunfig 里url的 host/path 和签发 Token 的源不一致因为 Bun 按 host 和 path 匹配认证信息差一个路径就匹配不上。先执行curl -s -H Authorization: Bearer $ACME_TOKEN https://npm.acme.com/-/whoami返回用户名说明 Token 有效问题在 URL 匹配返回 401 说明 Token 本身失效。私有包 404 或解析到了公共源现象bun add acme/logger报 404或 lockfile 里指向了 npmjs.org。最常见原因是install.scopes的键名多写了写成acme等于没配请求直接落到默认源。执行grep acme/logger bun.lock看该行指向哪个 registry。如果指向 npmjs.org检查[install.scopes]下是否存在键名为acme的条目。依赖安装成功但脚本没执行现象私有包装上了但 postinstall 没跑运行时报缺少编译产物。原因是 Bun 默认安全任何包的生命周期脚本都不执行只有白名单里的包除外。执行bun pm untrusted确认它出现在被拦截列表后加入白名单再重装bun pm trust acme/tools bun install参考.npmrc 兼容说明落地检查清单bun.lock中私有包指向内部源bunfig 中 Token 走环境变量引用私有作用域键名不带前缀CI 环境已注入对应 Token需要脚本的包已bun pm trustbunfig.toml已提交进仓库把这份 bunfig.toml 连同 lockfile 一起提交团队其他成员 clone 后只需注入 Token 即可直接安装。【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考