使用 pnpm 替代 yarn, npm, nvm

8,021 阅读2分钟

pnpm 的优势不用多说, 懂得自然了解了, 不懂的去官网看下他们的介绍 项目初衷 | pnpm

image.png

这里的主要的目的是使用 pnpm 替换掉 yarn 和 npm

  • npm 是 node 的包管理工具, 所以我的理解是 node 是基础, 需要 npm 必须要有 node
  • 然而 node 的版本也可以支持切换, 这样再切换 node 的时候则需要使用到 nvm , 而 nvm 是依赖于 npm 和 yarn 的.

这样造成的依赖循环逃脱不了轮回, 就会导致东西关联较多在我了解了 pnpm 之后他可以很好的解决以上问题并且还有它自己独到的优势

  • 纯净安装, 依托于 brew
  • 可以管理全局 node , 并支持自动安装
  • 包管理使用软链接方式, 不必在多项目之间重复下载占用磁盘空间

所以就打算用他替换掉 nvm, yarn, npm 这些工具, 仅仅使用一个即可

nvm 可以使用 pnpm env 替换

清理基于 nvm, node, npm 的相关包

找到已经安装的命令

# 基于 nvm 管理 node
$ which node
/Users/duoli/.nvm/versions/node/v16.14.2/bin/node

# yarn 位置以及 global 命令
$ which yarn
/Users/duoli/.yarn/bin/yarn

# yarn global bin
$ which browser-sync
/Users/duoli/.config/yarn/global/node_modules/.bin/browser-sync

$ rm -rf ~/.yarn
$ rm -rf ~/.nvm 
$ rm -rf ~/.config/yarn

移除 .zshrc 文件中的配置

# nvm & node
# export NVM_DIR="$HOME/.nvm"
# [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
# [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
# yarn
# export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"

清理命令后需要重新打开下命令行, 否则路径还是在终端中生效

安装

Posix 系统安装

这里需要有外网环境, 否则无法安装

$ curl -fsSL <https://get.pnpm.io/install.sh> | sh -
# 或者
$ wget -qO- <https://get.pnpm.io/install.sh> | sh -
$ wget -qO- <https://get.pnpm.io/install.sh> | sh -
==> Extracting pnpm binaries 7.9.0
Copying pnpm CLI from /tmp/tmp.6KHxbajrOb/pnpm to /home/user/.local/share/pnpm/pnpm
Appended new lines to /home/user/.bashrc

Next configuration changes were made:
export PNPM_HOME="/home/user/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"

To start using pnpm, run:
source /home/user/.bashrc

这里安装之后已经设置上了pnpm 的存储位置以及变量, 不需要再进行设置, 直接运行 source ~/.bashrc 即可使用

Mac 全局安装

# mac
$ brew install pnpm

CentOS 7 骚操作

因为 CentOS 7(国内环境) 无法安装 pnpm, 所以先安装 node, npm, 然后使用 npm 安装 pnpm

使用 root 用户安装环境

# yum install nodejs
# yum install npm

使用 普通用户提权安装 pnpm, 因为这里需要软链接到 /usr/local/bin/pnpm

$ sudo npm -g install pnpm

使用 pnpm 自身来更新自身, 将最新的 pnpm , 安装到 ~/.local/share/pnpm/ 目录下

$ pnpm add -g @pnpm/exe

配置环境变量

$ pnpm setup
$ source ~/.bashrc

这样便在 ~/.bashrc 文件中生成如下的内容, 用以加载 pnpm 环境变量

# pnpm
export PNPM_HOME="/home/duoli/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
# pnpm end

设置以及结构

设置环境变量

自动设置会添加默认的路径到 rc文件中

$ pnpm setup

会自动生成以下的内容到 .zshrc文件中

export PNPM_HOME="/Users/duoli/Library/pnpm"
export PATH="$PNPM_HOME:$PATH"
$ source ~/.zshrc

启用不同版本的 node

使用 lts 版本的 node

$ pnpm env use --global lts

安装 nrm

这里首先安装 nrm , 后续的安装启用淘宝镜像后安装的速度会快一些

$ pnpm install -g nrm
$ which nrm
/Users/duoli/Library/pnpm/nrm

这里 nrm 命令会安装到设定的目录, 具体的目录树结构请继续阅读

树结构

.
├── eslint
├── npm
├── npx
├── nrm
├── pnpm
├── pnpx
├── prettier
├── ...        # 全局复制过来的快捷链接
├── global     # Global 包文件
│   └── 5
├── node -> /Users/duoli/Library/pnpm/nodejs/16.17.0/bin/node
               # 当前启用的全局 node 版本
├── nodejs     # nodejs 的安装文件
│   ├── 16.14.2
│   ├── 16.15.1
│   ├── 16.16.0
│   ├── 16.17.0
│   ├── 18.4.0
│   └── 18.6.0
└── store      # 包文件
    └── v3

附录

2023年04月11日

  • yarn 并非依托于 npm, yarn 依托于 node(移除错误介绍)

2023年02月08日

  • 移除对比 yarn 部分, 增强实用性
  • 增加 pnpm 目录树
  • 增加常用命令
  • 移除清理的对比