从复杂的混用开始#
dsh 出的时候,用 bun 装的,但是 dsh plugin 命令替换的是 pnpm ,如果用 bun 管理插件会非常麻烦。之前还用 bun 装了 opencode ,一扫C盘发现node_modules里有9个opencode没绷住…😅这次彻底整理一下。听说 bun 被 a/ 收购了,以 a/ 的性子估计好不到哪去,所以索性删干净重装 bun 了。
npm、pnpm、bun 都有啥区别?#
| 特性 / 维度 | npm | pnpm | Bun |
|---|---|---|---|
| 本质定位 | 传统包管理器 (Node.js 默认) | 高效的包管理器 | JS/TS 运行时 + 工具链 (含包管理器) |
| 安装速度 | 较慢 | 快 (全局缓存 + 硬链接) | 极快 (系统级 API 优化 + 二进制锁文件) |
| 磁盘占用 | 高 (每个项目重复下载) | 极低 (全局基于内容寻址的存储) | 极低 (支持全局缓存) |
node_modules 结构 | 扁平化结构 (容易引发幽灵依赖) | 软硬链接嵌套结构 (非扁平,但可兼容) | 扁平化结构 |
| 安全性/依赖隔离 | 较弱 | 极强 (禁止访问未声明的依赖) | 较弱 (机制同 npm) |
| 适用场景 | 传统老项目、不需要额外安装环境 | 大中型项目、Monorepo 多包管理 | 追求极速构建/新建原生 TS 项目 |
| 选型建议 |
- 选 npm: 不想额外交外置工具、维护传统小型项目或新手入门
- 选 pnpm: 团队协作、大型复杂项目、Monorepo 架构,或者磁盘空间紧张(目前生产环境最推荐)
- 选 Bun: 追求极致安装/构建速度、新建原生支持 TS 的服务、尝试全栈新生态
Agent 插件其实与本体无关#
每个 ai agent 都有自己独自的插件管理体系,他需要啥就给他安装好啥包管理器就好了,交给 ai agent 自己的调用方式进行管理即可啦~
装个 pnpm#
- easy 一行命令
Invoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression
- 修改 store & cache 路径到其他硬盘
pnpm config set store-dir "D:\your-path\pnpm-store" --global
pnpm config set cache-dir "D:\your-path\pnpm-cache" --global
# 读取当前设置
pnpm store path
pnpm config get cache-dir
- (按需)修改全局 global bin 位置
pnpm config set global-dir "D:\your-path\pnpm-global" --global
pnpm config set global-bin-dir "D:\your-path\pnpm-global\bin" --global
pnpm config list # 确认四个 key 都是 D:\ProgramData\pnpm\*
pnpm config get global-dir # 单独验证
- (无需)排除杀软
#管理员模式
Add-MpPreference -ExclusionPath $(pnpm store path)
- 搞定!✅重启终端即可使用 pnpm
- 查看pnpm已经安装的包
pnpm ls -g
先斩意中人 bun#
接下来进行软件包的迁移: 一些环境变量记录:(均在D盘放着)
BUN_INSTALL_BINBUN_INSTALL_CACHE_DIRBUN_INSTALL_GLOBAL_DIR
查看 bun 已经安装的包#
bun pm ls -g
@cometix/codex#
bun rm -g @cometix/codex
pnpm add -g @cometix/codex
pnpm ls -g # 查看已经全局安装的包
@opencode-ai#
bun rm -g @opencode-ai
pnpm add -g @opencode-ai
pnpm ls -g # 查看已经全局安装的包
@deepseek-ai/dsh#
dsh有点麻烦,对npm布局有要求
bun rm -g @deepseek-ai/dsh
pnpm add -g @deepseek-ai/dsh --config.node-linker=hoisted # 需要使用平铺包
# 需要允许编译 选 a 再 回车
dsh 的插件生态是基于 pnpm 的,使用 dsh plugin 命令即可:
dsh plugin --profile web add @linxin666/dsh-web-all@latest
插件还需要手动进行允许build,前往 ./dsh/pnpm-workspace.yaml 文件手动修改
再来迁移 npm#
查看 npm 已经安装的包#
npm ls -g --depth=0
@earendil-works/pi-coding-agent#
npm uninstall -g @earendil-works/pi-coding-agent
pnpm add -g @earendil-works/pi-coding-agent
# 更新:pi update --self
pi 的插件生态是基于 npm 的,交给他自己就可以了
pi update --extensions # 只升级插件包 + 对齐 git ref
pi update --all # pi 本体 + 插件全量升级
pi update npm:pi-slopchop # 升级单个包
pi update --models # 刷新模型目录
加载新插件:pi install,与 npm/pnpm 无关
pi install npm:包名 # 最常见的 npm 包 (如 pi install npm:pi-something)
pi install npm:包名@1.2.3 # 锁定版本
pi install git:github.com/user/repo@main # git 仓库 + ref
pi install C:\path\to\package # 本地路径
pi install -l <spec> # 项目级(写 .pi\settings.json,团队共享,trust 后自动装)
pi remove <spec> # 卸载
