前言
pnpm是前端的一种包管理工具,我们经常使用的包管理工具是Npm,Yarn这两种是非常常见的。npm要适配Node.js的版本,有很多问题。比如,你有100个项目,那如果都是基于Vue.js来做的,那么就会有100个Vue.js的依赖包,会占用你额外的硬盘空间,这个就是pnpm出现要解决的问题。如果有不同的版本依赖包,pnpm会保存版本间不同的文件。主要是节省空间,和提高安装依赖的速度。
安装
我是用Npm来安装pnpm的,安装的速度还挺快的。
npm install -g pnpm
查看版本号
pnpm -v
初始化package.json
pnpm init
什么是workspace协议
如果可用包与声明的范围匹配,那么会从workspace中关联包,如果依赖包的版本超出workspace的版本,那么会从registry去下载安装。 当使用workspace协议时,pnpm将拒绝解析本地工作区包以外的任何内容。
{
"dependencies": {
"foo": "workspace:*",
"bar": "workspace:~",
"qar": "workspace:^",
"zoo": "workspace:^1.5.0"
}
}
以上代码,将会被workspace协议解析为以下代码,如果最新的版本为1.5.0的话。
{
"dependencies": {
"foo": "1.5.0",
"bar": "~1.5.0",
"qar": "^1.5.0",
"zoo": "^1.5.0"
}
}
pnpm-workspace.yaml文件的作用
定义了工作区的根目录,并允许您从工作区中包含/排除目录。默认情况下,包含所有子目录的所有包。如何使用呢?
packages:
# 包的直接子分区中的所有包/
- 'packages/*'
# 组件分区中的所有包/
- 'components/**'
# 排除测试目录内的包
- '!**/test/**'
在根目录安装依赖报错
Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don't want to see this warning anymore, you may set the ignore-workspace-root-check setting to true.
这段话的意思是,安装的依赖是在根目录的工作区,让你确认一下。 解决方法:
pnpm add xxx -w
或者:
pnpm config set ignore-workspace-root-check true
pnpm.peerDependencyRules.ignoreMissing有什么作用
pnpm 不会打印有关依赖列表中缺少对 peerDependency 的警告。如一下配置,如果依赖项需要vite,但是未安装vite是不会报错的。
{
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": ["vite"]
}
}
}