一个命令,统一四种包管理器

x 会读你的 package.json 和锁文件,判断出这个项目实际用的是哪个包管理器, 然后把命令翻译成对应的那一个。

x i 在 pnpm 项目里跑 pnpm install,在 npm 项目里跑 npm install。你不用切换,也不用记。

terminal
$ x i
[x] 检测到 pnpm-lock.yaml,使用 pnpm
$ x a -D typescript
$ x dev          # 等价于 pnpm run dev
$ x search react  # 默认走国内源
$ xgo cowsay hi  # 统一 npx / dlx
Node.js ≥ 18.18 · macOS / Linux / Windows · MIT · 零运行时依赖
Why

解决那些每天都会遇到的小麻烦

不是要替代包管理器,只是让你不用在四个命令之间来回猜。

?不用记该用哪个

接手一个仓库、换个分支、CI 里换了一套锁文件——每换一次包管理器你都要重新记一遍命令。 x 每次都会告诉你它为什么这么选: [x] 检测到 pnpm-lock.yaml,使用 pnpm

⚡搜包不用等超时

x search react 默认走 npmmirror 国内源。 官方源在国内经常卡十几秒,按一次 --source npm 就切回去。

⌕装了什么、装在哪

x find eslint 模糊搜本地和全局的 node_modules,标好版本、位置和依赖类型; x where eslint --bin 直接拿到可执行文件路径。

▷跑临时包不用挑 runner

xgo cowsay hi 一个命令顶替 npx / pnpm dlx / yarn dlx / bun x。 本地装了就用本地的,没装才走 dlx。

⇄切换不用重装

x use pnpm 往 package.json 写 packageManager 字段——这是检测优先级最高的依据,写完立刻生效。

🔒绝不擅自提权

只有你显式传 --sudo,或者执行失败报权限错误并且你亲口同意, 才会加 sudo。CI 和管道里会直接跳过提问,不会挂住。

Commands

命令对照表

你写一条,x 翻译成四个包里对应的那一个。

x 命令 npm pnpm yarn bun
x i npm install pnpm install yarn install bun install
x a axios npm install axios pnpm add axios yarn add axios bun add axios
x a -D ts npm install -D ts pnpm add -D ts yarn add -D ts bun add -D ts
x r lodash npm uninstall lodash pnpm remove lodash yarn remove lodash bun remove lodash
x up npm update pnpm update yarn upgrade bun update
x ls npm ls --depth=0 pnpm list --depth=0 yarn list --depth=0 bun ls
x run dev npm run dev pnpm run dev yarn run dev bun run dev
x dev 未识别的命令一律当作 package.json 脚本,等价于 x run dev
x exec eslint . npm exec -- eslint . pnpm exec eslint . yarn exec eslint . bun x eslint .
xgo cowsay hi npx cowsay hi pnpm dlx cowsay hi yarn dlx cowsay hi bun x cowsay hi
透传
所有未知参数原样透传,所以 x i --legacy-peer-deps、x dev --port 3000、 x a axios -- --registry 内网源 都能用。选项不会被 x 吃掉,也不会打乱顺序。
Detection

它凭什么知道你用的是哪个包管理器

从高到低逐级判断,命中即停。每次执行都会告诉你命中了哪一条。

1 --pm <pm> 命令行显式指定,优先级最高
2 package.json#packageManager 命中后直接忽略所有锁文件
3 package-lock.json → npm
4 pnpm-lock.yaml → pnpm
5 bun.lockb / bun.lock → bun
6 yarn.lock → yarn
7 .xrc.json#defaultPM 锁文件缺失时的兜底
8 都没有 → 默认 npm
Get started

三步装上

装完就有 x 和 xgo 两个全局命令。

克隆并安装依赖

需要 Node.js ≥ 18.18。

bash
git clone https://github.com/hanqindylan/x-pm.git
cd x-pm
npm install
npm run build
npm link

确认能用了

bash
$ x --version
0.1.0

在别的电脑上装

也可以分享给别人,一条命令搞定。

bash
npm i -g github:hanqindylan/x-pm