pnpm 的优势不用多说, 懂得自然了解了, 不懂的去官网看下他们的介绍 项目初衷 | pnpm
这里的主要的目的是使用 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 目录树
- 增加常用命令
- 移除清理的对比