node.js - pnpm 快速且节省磁盘的新一代包管理工具
相较于传统的 npm 和 Yarn,pnpm 采用了一种全新的依赖管理方式,通过共享依赖来减少磁盘占用,同时提供了快速的安装和更新速度。
1. 安装pnpm
npm install -g pnpm
2. 初始化项目
pnpm init
pnpm root
# 打印有效的存放模块(modules)的目录
3. 配置pnpm (本地配置文件为项目下的.npmrc)
pnpm config list
# 显示所有config的设置
pnpm config get <key>
# 显示config设置的某一项
pnpm config set <key> <value>
# 设置config的某一项
pnpm delete <key>
# 从配置中删除配置的key
4. 安装项目依赖
pnpm install
# 安装项目所有依赖
pnpm i --offline
# 仅从store中离线下载
pnpm i -D
# 仅安装devDependencies并删除已安装的dependencies,无论 NODE_ENV是什么
pnpm i -P
# 使用这个指令pnpm会忽略NODE_ENV ,强制pnpm以production的方式执行install命令
5. 安装依赖包
-
从npm源安装
pnpm add <pkg>
# 默认保存到 dependencies
pnpm add -P <pkg>
# 保存到 dependencies
pnpm add -D <pkg>
# 保存到 devDependencies
pnpm add -g <pkg>
# 全局安装 -
从本地安装
pnpm add ./package.tar.gz
# 从源码文件 (.tar, .tar.gz, or .tgz) 安装
pnpm add ./some-directory
从本地目录安装
注意: 当从目录安装时,会在当前项目目录中生成一个 symlink node_modules, 因此这里跟执行 pnpm link 是一致的. -
从远端安装tar包
pnpm add https://github.com/indexzero/forever/tarball/v0.5.6
-
从git安装
pnpm add <git remote url>
6. 更新依赖
pnpm upgrade <pkg>
pnpm update <pkg>
pnpm up <pkg>
7. 删除依赖
pnpm remove <pkg>
pnpm uninstall <pkg>
pnpm rm <pkg>
pnpm un <pkg>
8. 使本地包可在其他位置访问
pnpm link <dir>
# 将包从 dir 链接到执行命令的包的 node_modules
pnpm link --dir <dir>
# 将包从当前工作目录链接到 dir
pnpm link --global
# 将此命令执行位置的包链接到全局以便其他包从全局引用
pnpm link --global <pkg>
# 将指定的包pkg从全局 node_modules 链接到 package 的 node_modules
pnpm link --global --dir <dir>
# 将指定位置的包链接到全局以便其他包从全局引用
pnpm link --global <pkg> --dir <dir>
# 将指定的包pkg从全局 node_modules 链接到 dir node_modules
9. 管理包存储
pnpm store status
# 查看 store 中已修改的包
pnpm store add <pkg>
# 将包加入存储中
pnpm store path
# 返回存储目录路径
pnpm store prune
# 清理未引用的包
10. 本地运行命令
pnpm run <script-name>
# 运行 package.json 文件中定义的脚本
pnpm start
# 运行start属性指定的脚本
pnpm test
# 运行test属性指定的脚本
pnpm exec jest
# 执行依赖项node_modules/.bin中的jest命令
pnpm create react-app my-app
从 create-* 或 @foo/create-* 启动套件创建my-app项目。
11. 卸载pnpm
pnpm ls -g
# 列出所有全局包
pnpm root -g
# 列出全局包目录
pnpm rm -g <pkg>
# 删除某个全局包
rm -rf $(pnpm store path)
# 删除全局内容可寻址存储
npm rm -g pnpm
# 卸载pnpm
12. pnpm vs npm
- npm v3开始使用平铺的依赖结构,这可以减少磁盘占用,却导致node_modules目录的混乱。
- pnpm 使用硬连接和符号连接到全局磁盘内容可寻址存储来管理node_modules, 这将带来更少的磁盘占用空间,也能保持node_modules整洁。
- pnpm 正确的node_modules结构的好处是,让你无法使用package.json中没有指定的模块, npm的平铺依赖结构则有这个问题。