PNPM从入门到精通

1,235 阅读2分钟

前言

  pnpm是前端的一种包管理工具,我们经常使用的包管理工具是Npm,Yarn这两种是非常常见的。npm要适配Node.js的版本,有很多问题。比如,你有100个项目,那如果都是基于Vue.js来做的,那么就会有100个Vue.js的依赖包,会占用你额外的硬盘空间,这个就是pnpm出现要解决的问题。如果有不同的版本依赖包,pnpm会保存版本间不同的文件。主要是节省空间,和提高安装依赖的速度。

安装

  我是用Npm来安装pnpm的,安装的速度还挺快的。

npm install -g pnpm

Snipaste_2023-02-28_10-14-52.png

查看版本号

pnpm -v

Snipaste_2023-02-28_10-16-11.png

初始化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"]  
        }  
    }  
}