Skip to content

JavaScript 包管理器

osdk 把 npm、pnpm 和 Yarn 当作可独立锁定的 backend,也直接管理 Bun、Deno。 它同时为可能获取 npm 包的命令做启动前 Registry 选择,但不会重写项目 lockfile。

npm 包管理器与 npm 工具不是同一个 backend

npm@11.5.2 安装 npm CLI;npm:prettier@3 安装 npm Registry 中的 Prettier 开发工具。后者的完整生命周期、安全策略和离线行为见 npm 开发工具

安装与命令

所有 manager 使用通用生命周期命令:

text
osdk install MANAGER[@VERSION]... [-o|--opt KEY=VALUE ...]
osdk lock [MANAGER[@VERSION] ...] [-o|--opt KEY=VALUE ...]
osdk upgrade [MANAGER[@VERSION] ...] [-o|--opt KEY=VALUE ...]
osdk use|u MANAGER[@VERSION] [-g|--global] [-o|--opt KEY=VALUE ...]
osdk exec (-t|--tool MANAGER[@VERSION])... -- COMMAND [ARG ...]
osdk list|ls [MANAGER]
osdk list-remote|lsr MANAGER [FILTER]
osdk current [MANAGER]
osdk where MANAGER[@VERSION]
osdk uninstall|rm MANAGER@VERSION

这些生命周期命令接受通用 -o/--opt KEY=VALUE,但本页列出的包管理器 backend 当前没有专用安装选项。

bash
osdk install npm@11.5.2
osdk install pnpm@10.15.0 yarn@4.9.2
osdk install bun@latest deno@latest
backend安装物与校验暴露命令自动补 Node
npmnpm registry 的 npm 包,SRInpmnpx
pnpm完整 pnpm npm package,SRIpnpmpnpx;后者路由为 pnpm dlx
Yarn 1yarn 包,SRIyarnyarnpkg
Yarn 2+@yarnpkg/cli-dist 包,SRIyarnyarnpkg
Bun@oven/bun-* 平台包,SRIbunbunx;后者路由为 bun x
Deno@deno/* 平台包,SRIdeno

pnpm 从完整 pnpm package 解析版本和安装 JavaScript distribution,并使用受管 Node 启动;它不会直接提取只含 SEA 二进制的 @pnpm/<os>-<arch> package。Bun 与 Deno 则直接 以当前平台实际安装的 npm platform package 为准。

npm 和 Yarn 的 launcher 调用 PATH 中的 Node。只要一次请求含 npmpnpmyarn 而没有 Node,osdk 就自动加入 Node:先按项目规则选择版本,找不到时用 latest。该规则也适用于显式工具列表;manager bin 排在受管 Node bin 之前,不依赖 用户全局 Node。

packageManager 自动发现

osdk 自动发现 npm、pnpm 或 Yarn 的精确版本,优先级为:

  1. 最近祖先项目配置 [tools] 中的 npmpnpmyarn
  2. 最近祖先 package.json#packageManager
  3. 同一 package.json#devEngines.packageManager(对象或数组第一项)。
json
{
  "engines": { "node": ">=20 <23" },
  "packageManager": "pnpm@10.15.0"
}

只支持 npm|pnpm|yarn@精确 semver。缺少版本、Bun/Deno、URL、路径,以及带 #+ hash/build suffix 的值都会失败。packageManager 优先于 devEngines.packageManager。无参数 install/lock/upgrade 会自动加入 manager 和 Node;current 也会报告对应 package.json 来源。

Registry 预检

诊断命令的完整语法:

text
osdk registry test [MANAGER]

MANAGER 接受 npm|npxpnpm|pnpxbun|bunxdeno,以及 yarn-classic|yarn1|yarn@1yarn-berry|yarn2|yarn3|yarn4|yarn@2|yarn@3|yarn@4。 传 yarn|yarnpkg 时,若项目能确定 major 就只测对应策略,否则分别测 Classic 与 Berry。省略 manager 会检查 npm、pnpm、可判断的一种或两种 Yarn、Bun、Deno。 该命令只探测,不运行安装。

bash
osdk registry test
osdk registry test pnpm
osdk registry test yarn

自动覆盖的调用

直接 shim、shell activation 和 osdk exec 中的下列命令,会在 manager 启动前 评估是否需要 npm-compatible Registry:

程序会触发预检的命令
npminstalliciaddupdateupexec
npx有位置参数的命令,或 --package/-p--call/-c 获取形式
pnpminstalliaddupdateupfetchdlxdeploy
pnpx有位置参数的命令
Yarn 1/2+无子命令,或 installaddupgradeupdlxcreate
buninstalliciaddupdatex
bunx有位置参数的命令
denoaddbenchcachecheckcicompiledocevalinfoinstalloutdatedrunservetasktestupdate

Yarn major 无法判断时,实际执行路径不会猜测,而是直接透传。launcher/script 操作数 之后的子进程参数不会被误判为 manager 参数。

跳过预检的情况

以下情况保持 manager 自己的选择,不探测或覆盖:

  • osdk 使用 --offline
  • 命令参数显式指定 Registry;
  • 对应 Registry 环境变量已经设置;
  • manager 参数显式选择另一 cwd 或配置文件;
  • npm/pnpm/Yarn/Bun 使用真正的 --offline;Deno 在支持的命令上使用 --cached-only
  • --help-h--version-v 等自省调用,或命令不在白名单;
  • 原生配置无法安全解析,或包含私有/未知/scope Registry、认证、TLS、原生代理、 自定义配置路径等策略。

--prefer-offline、frozen lockfile 和 immutable cache 不保证断网,因此仍可能预检。 Deno 没有通用 --offlinecioutdatedupdate 也不支持 --cached-only

候选选择与单次执行

toml
[registries.npm]
urls = [
  "https://registry.npmmirror.com/",
  "https://registry.npmjs.org/",
]
probe_timeout_ms = 1500
manager选中后只注入此变量
npm/npxnpm_config_registry
pnpm/pnpxpnpm_config_registry
Yarn 1YARN_REGISTRY
Yarn 2+YARN_NPM_REGISTRY_SERVER
BunBUN_CONFIG_REGISTRY
Deno npm 层NPM_CONFIG_REGISTRY

未配置列表时,内置 npmmirror 与 npmjs 会并发匿名探测并选择延迟最低的健康项。 显式项目/用户列表保留顺序,选择第一个健康项;项目 [registries] 整段覆盖用户层。 所有候选失败时 manager 启动零次;启动后失败不会切源重跑,以免脚本、lockfile 或 node_modules 被执行两次。

osdk 会读取 .npmrc.yarnrc.yarnrc.ymlbunfig.toml/.bunfig.toml 以及相关用户/全局配置,只把识别出的公共 npmjs/npmmirror 纳入候选。它不改项目 lockfile,也不拦截网络;metadata 或 lockfile 中的绝对 artifact URL 仍可能绕过默认 Registry。

原生缓存语义

这些路径保留各工具的原生格式,并不是跨 manager 的统一 tarball CAS:

工具环境变量osdk 路径与含义
npmnpm_config_cache<cache>/pkg/npm,npm cacache
pnpm ≤10PNPM_HOMEnpm_config_store_dir<cache>/pkg/pnpm<cache>/pkg/pnpm-store
pnpm ≥11PNPM_HOMEpnpm_config_store_dir同上,仅 store 变量名不同
Yarn 1YARN_CACHE_FOLDER<cache>/pkg/yarn-classic
Yarn 2+YARN_GLOBAL_FOLDER<cache>/pkg/yarn
BunBUN_INSTALL_CACHE_DIR<cache>/pkg/bun
DenoDENO_DIR<cache>/pkg/deno,还含编译产物和部分运行时状态

Yarn 2/3 默认仍以项目 .yarn/cache 为 active cache,但默认 mirror 会使用 ${YARN_GLOBAL_FOLDER}/cache;Yarn 4 默认启用 global cache。osdk 不强制改 enableGlobalCachecacheFolder

这些变量通过当前 backend 的 shim/exec 和 shell hook 注入,并默认保留用户已有值。 osdk cache clean 只删除 osdk 下载归档,不会删除上述原生缓存。完整存储边界见 存储、Shell 与扩展

基于 MIT 许可发布