引入

对于不主要写前端,而是要使用 Nodejs 生态的某个工具时,运维只需要知道:pnpm 和 bun 比 npm 要节省空间并且快得多,其中 bun 对新项目的支持更完善,pnpm 对一些老项目的支持比 bun 要好,只有远古项目才会回头用到 npm。


安装

pnpm 和 bun 都可以用 npm 来安装。

如果对于 Windows,可以 在这里 下载一个 Nodejs 的便携版(独立文件),然后把解压后的目录添加到系统环境变量中即可使用 Nodejs 和 npm。

Windows中控制包管理器的安装位置

在 Windows 中,不管是 npm 还是 pnpm,如果我们安装了某个全局包,那么它可能会把二进制文件默认放到 C:\Users\xx\AppData\Local 里。对于这种随意在 C 盘拉屎的行为,我是不可原谅的。因此我们需要完全掌控包管理器的全局二进制位置和缓存位置等。

  • 配置 npm 安装路径

既然我建议使用 pnpm 和 bun,那么在用 npm 安装这两个之前,我们就要控制 npm 安装的二进制文件的位置。假设你把 Nodejs 放在了 D:\web\nodejs 里,那么你需要新建这两个文件夹并在终端中配置 npm 的安装目录

# 1. 设置全局包和二进制文件的安装目录
npm config set prefix "D:\web\nodejs\npm_global"
 
# 2. 设置 npm 的缓存目录
npm config set cache "D:\web\nodejs\npm_cache"

之后,将你设置的二进制文件的目录 D:\web\nodejs\npm_global 添加到系统环境变量 path 中即可。

  • 配置 pnpm 安装路径

我们直接使用 npm 安装 pnpm。

npm i -g pnpm

由于之前我们已经将 npm 的安装路径和环境变量配置好,所以 pnpm 安装在了我们自定义的位置,并且终端中也能直接运行 pnpm。

下面,为了进一步防止 pnpm 在 C 盘拉屎,我们需要进行如下操作:

在终端中执行:

# 创建对应文件夹
mkdir -p D:\web\pnpm\store,D:\web\pnpm\global,D:\web\pnpm\bin, D:\web\pnpm\cache, D:\web\pnpm\state
 
# 配置 pnpm 的所有目录
pnpm config set store-dir "D:\web\pnpm\store"
pnpm config set global-dir "D:\web\pnpm\global"
pnpm config set global-bin-dir "D:\web\pnpm\bin"
pnpm config set cache-dir "D:\web\pnpm\cache"
pnpm config set state-dir "D:\web\pnpm\state"

然后将 D:\web\pnpm\bin 添加到系统变量中的 path 里即可。

如果你之前装过 pnpm

那你可以直接把 C:\Users\SY\AppData\Local\pnpm 给删掉并用 npm 重新装一遍。

  • 安装 bun 并配置

验证一下 pnpm 是不是真的改变了安装位置,我们安装 bun 测试一下。

pnpm install -g bun
 
# 根据提示运行
pnpm approve-builds -g

bun 安装的包的位置直接取决于环境变量中的配置,我们在用户变量中新建如下变量:

  • 变量名:BUN_INSTALL_BIN

  • 变量值:D:\web\bun\bin

  • 变量名:BUN_INSTALL_GLOBAL_DIR

  • 变量值:D:\web\bun\global

  • 变量名:BUN_INSTALL_CACHE_DIR

  • 变量值:D:\web\bun\cache

并把 D:\web\bun\bin 添加到 path 中。

重启终端后,测试一下:

bun install -g @openai/codex

发现确实装到了我们想要的位置。