pnpm
作为最潮流的包管理工具,相信很多人早就使用,也知道为什么pnpm
吊打npm
,但是你还是很有必要学习下add
和install
命令的细节,找出一些pnpm
特色。
pnpm和npm命令的差异
npm命令 | pnpm命令 |
---|---|
npm install | pnpm install |
npm i <pkg> | pnpm add <pkg> |
npm run <cmd> | pnpm <cmd> |
当你用pnpm
执行一个未知命令,比如pnpm go
,pnpm
也会在scripts
里查找是否有匹配的命令,所以pnpm lint
和pnpm run lint
是等价的。
如果没有找到命令,pnpm
还会尝试在本地依赖中查找,比如pnpm eslint
,就能够直接运行已经安装的eslint
命令,这样的好处是不用全局安装就可以直接使用命令。
pnpm add
add
命令想必大家都很熟悉了,和yarn add
一样,和npm install
类似。
需要注意的是,在workspace
中使用时,想在项目根目录安装依赖需要加上-w
,安装到packages
请使用--filter
参数指定名称。
举个栗子:
// 给某个app1包安装video.js
pnpm --filter app1 add video.js
命令 | 意义 |
---|---|
pnpm add sax | 保存到dependencies |
pnpm add -D sax | 保存到devDependencies |
pnpm add -O sax | 保存到optionalDependencies |
pnpm add -g sax | 安装到全局 |
add
命令有五种来源:
- npm 源
- workspace内
- 本地文件
- 从远端tar包安装
- 从git安装
add
命令支持的参数有:
- –save-prod, -P:安装到dependencies
- –save-dev, -D:安装到devDependencies
- –save-optional, -O:安装到optionalDependencies
- –save-exact, -E:保存的版本号会是一个具体的值,相当于锁死版本
- –save-peer:安装到peerDependencies和devDependencies中
- –ignore-workspace-root-check:允许在项目根目录添加依赖包
- –global:安装到全局
- –workspace:仅添加在 workspace 内找到的依赖项
pnpm install
被细分出来的install
命令是用来安装项目所有依赖。
支持的参数
–force
强制重新安装依赖。
–offline
- 默认值:false
如果设置了--offline
参数,pnpm
会只使用本地缓存的包,如果本地没有找到某个包,最终安装就会失败。
可以理解为离线模式。
–prefer-offline
- 默认值:false
如果设置了--prefer-offline
参数,本地没有的包会从远端安装,其他会优先使用本地缓存的包。
–prod,-P
如果环境变量中NODE_ENV
被设置为production
,那么pnpm
不会安装任何属于devDependencies
的包,如果有相关的包已经被安装了,则会清除这些包。 使用这个指令pnpm
会忽略NODE_ENV
,强制pnpm
以production
的方式执行install
命令。
–dev,-D
仅安装devDependencies
并删除已安装的dependencies
。
–no-optional
不安装optionalDependencies
依赖。
–lockfile-only
使用时,只更新 pnpm-lock.yaml
和 package.json
。 不写入 node_modules
目录。
–fix-lockfile
自动修复损坏的lock
文件入口。
–frozen-lockfile
- 默认值:
- 非 CI: false
- CI: true, 如果存在 lock 文件
如果设置 true
, pnpm
不会生成 lockfile
,而且如果 lockfile
是偏旧或不存在lockfile
则会安装失败.
–reporter=name
- 默认值:
- TTY stdout: default
- 非 TTY stdout: append-only
允许您选择将调试信息记录到终端, 以了解安装进度.
silent
- 控制台不展示任何信息
default
- TTY 的默认输出
append-only
- 始终向末尾追加输出
ndjson
- 打印所有ndjson
格式日志,最详细的版本
–use-store-server
通过本地的store
服务安装,安装完成后store
服务不会自动关闭,需要使用pnpm server stop
停止。
–shamefully-hoist
创建一个扁平化node_modules
目录结构, 类似于npm
或 yarn
。
不推荐使用,可能会导致未知问题。
–ignore-scripts
不执行任何项目中package.json
以及依赖内定义的任何脚本。