ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Bun 私有源配置:bunfig.toml 的注册表写法与踩坑实录

Bun 私有源配置:bunfig.toml 的注册表写法与踩坑实录 Bun 私有源配置bunfig.toml 的注册表写法与踩坑实录【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun$ bun add company/utils跑完提示包在 registry.npmjs.org 上找不到——私有源压根没连上请求默认全打给了 npm 公共源。给 Bun 的包管理器指一个私有注册表核心就是在 bunfig.toml 里写好[install]的 registry 和 scopes再处理认证、缓存和离线场景。下面是跑通之后整理的配置方式和几个真实踩过的坑。Bun 私有注册表解析机制从 bunfig.toml 到命中注册表先说清楚输入、处理、输出配置才不会写歪。输入有三个来源项目根的 bunfig.toml、项目/全局 .npmrc以及环境变量。其中 bunfig.toml 的[install]表是主入口registry是默认注册表scopes是作用域到注册表的映射表。处理分两步。第一步解析配置[install.scopes]下每个键是一个作用域名值可以是 URL 字符串也可以是url/token/username/password的对象。源码里有个细节作用域注册表没写url时会回退到默认注册表install 相关配置解析。第二步解析依赖拿到包名先查 scopes 表company/foo命中company作用域就走私有源没命中作用域就走默认源。命中与否直接决定了你后面看到的是 401 还是 404。注意作用域是精确匹配的不是包名前缀。internal-sdk这种不带scope的包不会命中任何 scope 条目只能靠默认源兜底——这是后面第一个坑的根源。输出端是全局缓存每个包按 包名版本 落进全局缓存~/.bun/install/cache项目里的 node_modules 通过硬链接Linux或写时复制macOS指向它第二次 install 不重新下载全局缓存。从零配到能跑bun 私有源 配置验证项目根目录创建或编辑 bunfig.toml结构长这样[install] registry https://registry.npmjs.org/ # 默认源兜底公共包 token npmrc_token # 公共源令牌如有 [install.scopes] company { url https://npm.company.com/, token npm_abc123 }注意这里的表名是[install]作用域写在[install.scopes]下。[bun]或[registry]这类写法会被当成未识别的表等于没配。验证一下不写盘bun install --dry-run # 预演解析看依赖命中的注册表路径确认company/utils指向了 npm.company.com、公共包仍走 npmjs再执行bun add company/utils bun install --verbose # 看解析日志是否走缓存链接、是否真的连上了私有源还在用 npm 的仓库不用删 .npmrcBun 兼容读取它两边共用一份配置company:registryhttps://npm.company.com/ //npm.company.com/:_authTokennpm_abc123缓存这块不用你做任何事默认就在跑。在已跑过一次 install 的机器上再装一遍第二次会明显更快——这是链接已缓存的包而不是重新下载实际提升取决于包数量和缓存是否命中实测下来体感差距很明显。复杂场景怎么扛多源、CI 令牌与离线不同 scope 指不同源内部包和外部供应商包分开走一个 scope 一条映射互不干扰[install.scopes] company { url https://npm.company.com/, token npm_internal } vendor { url https://npm.vendor.com/, token npm_vendor }想换源只改对应行不用动其他 scope。CI 里令牌怎么注入令牌别硬编码进 bunfig.toml——这个文件大概率要提交。CI 里走环境变量用 npm 标准的环境变量约定# .github/workflows/build.yml - run: bun install env: npm_config_company:registry: https://npm.company.com/ npm_config_//npm.company.com/:_authToken: ${{ secrets.NPM_TOKEN }}本地可以同样用环境变量代替 bunfig 里的token字段仓库里只留 URL、不留凭证。离线与隔离网络内网构建机走不通外网时bun install --prefer-offline # 缓存优先缺的才联网 bun install --offline # 完全离线缓存里没有直接报错配合[install]的cacheDirectory把全局缓存指到内网预热的目录[install] cacheDirectory /data/npm-cache # 缓存搬进内网共享盘先在一台能联网的机器上跑一遍 install 预热缓存再同步给构建机离线 install 就能闭环。生命周期脚本怎么授信bun install默认禁用依赖的生命周期脚本私有包里如果带了 postinstall先确认它该不该跑{ trustedDependencies: [company/build-tools] }加进 package.json 后bun pm untrusted可以列出还没授信的包和它们带着的脚本逐个过一遍再决定放行。我踩过的坑401 与 404 都不是玄学坑一装了私有包却报 404。现象error: failed to resolve import company/utils error: could not find company/utils in the npm registry原因是 bunfig.toml 里[install.scopes]的键写成了company/utils——scopes 只认作用域名不认包名。改成company或键不带只写company就正常了。改完先跑bun install --dry-run确认命中私有源再真正 install。坑二私有源回 401。现象error: failed to fetch package company/utils: HTTP 401 Unauthorized from https://npm.company.com/company%2futils原因是 token 绑定了另一个注册表域名或者作用域映射指向了错误的 URL。用 curl 直接验证 token 对哪个域名有效curl -fI -H Authorization: Bearer npm_abc123 https://npm.company.com/-/whoami401 就换对域名/换 token再确认 scopes 里这个作用域的url和 token 是同一家源。坑三token 提交进了仓库。bunfig.toml 里写着明文 token文件跟着 PR 合了。解法是 token 挪到环境变量或 .npmrc.npmrc 加进 .gitignore然后把泄漏的 token 在源上作废重发——光改文件不重发等于白改。命令速查场景命令备注预览解析路径bun install --dry-run不写盘核对命中哪个源带日志安装bun install --verbose看缓存链接与请求日志完全离线安装bun install --offline缓存缺失直接报错缓存优先安装bun install --prefer-offline缺的才联网查看未授信脚本bun pm untrusted放行前先过一遍强制重新解析bun install --force解析异常时兜底收个尾把 bunfig.toml 提交前先确认 token 没写死在[install]里.npmrc 记得进 .gitignoreCI 和本地跑bun install --dry-run各验一次确认作用域命中的 URL 一致再合入。【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表