pnpm的基本原理及快速使用
基本原理
前置知识:软件链接与硬链接
软链接(符号链接Symbolic link):是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。在window快捷方式上和其功能类似。
硬链接:是计算机文件系统中的多个文件平等地共享同一个文件存储单元(如MFT条目、inode)。硬链接必须在同一个文件系统中;一般用户权限下的硬链接只能用于文件,不能用于目录,因为其父目录就有歧义了。
熟悉Linux的朋友就很容易就能区分理解这两个东西了。(mac同)创建的命令分别是:
# 创建硬链接
$ ln target_file link_name
# 创建软链接
$ ln -s target_file link_name
$ ln -s target_directory link_name
当然在windows中使用mklink也能够创建软链接和硬链接
# 创建硬链接
mklink /H link_name target_file
# 创建软链接
mklink target_file link_name

创建非扁平化的 node_modules 文件夹

这是官网的一张说明其非扁平化 node_modules的图,可能不是很明白,我们可以对比着npm会比较明白。分别使用npm和pnpm安装axios。
PS G:\npm_demo> npm install axios
added 9 packages in 1s
PS G:\pnpm_demo> pnpm add axios
Packages: +9
+++++++++
Packages are hard linked from the content-addressable store to the virtual store.
Content-addressable store is at: G:\.pnpm-store\v3
Virtual store is at: node_modules/.pnpm
Progress: resolved 9, reused 6, downloaded 3, added 9, done
dependencies:
+ axios 1.2.2
Done in 2.8s

npm安装axios的时候,axios的依赖会放在和axios同一级,这样做的好处是,如果别的包也同样使用了这些依赖,就不用重新导入了。但是缺点是,我们在项目中也能直接去应用axios依赖导入的包。但我们自身的项目却是没有依赖那些包的。要是哪天移除了axios,那项目中可能就会出错了,也就是幽灵依赖。

切换node版本原理
在我们配置了系统环境变量之后,命令行中使用命令时,系统就会到配置的路径中去寻找是否有支持命令的软件,然后执行命令。

在安装pnpm的时候,它会在我们的环境变量中添加它自己文件夹的路径,比如在我电脑中它的路径是:
C:\Users\Administrator\AppData\Local\pnpm,它的目录结构如下:

当我们使用pnpm切换node版本的时候,没有对应的版本它则会下载对应版本的node,然后在将其创建了链接(软链接)到pnpm的根目录中。就相当于当前环境变量中有了对应版本的node了。
快速使用
安装
安装了node可以使用npm安装
npm install -g pnpm
没有也可以直接在powershell中使用命令进行安装
iwr https://get.pnpm.io/install.ps1 -useb | iex
安装过程中,若权限足够它会在自动在系统中添加环境变量。
常用命令(基本与npm一致)
| npm 命令 | pnpm 等效 |
|---|---|
| npm install | pnpm install |
| npm i | pnpm add |
| npm run | pnpm 或 pnpm run |
删除相关依赖
pnpm remove -D # 删除开发环境 devDependencies 中的依赖项
pnpm rm -P # 删除dependencies 中相关依赖项
pnpm uninstall -g # 全局中删除
pnpm prune # 移除没有在项目中使用的packages
管理node版本
pnpm env use --global lts # 安装lts版node
pnpm env use --global 18 # 安装v18版node
pnpm env use --global latest # 安装最新node
pnpm env remove --global 14.0.0 # 移除指定版本node
pnpm env list # 查看本地有的node版本
pnpm env list --remote # 查看网络源可用的node版本
其它命令
pnpm create react-app my-app
pnpm start # 别名 run start
常用配置
配置全局包路径
方法一(使用命令行进行配置)
pnpm config set global-bin-dir "E:\.pnpm-store"
pnpm config set cache-dir "E:\.pnpm-store\cache"
pnpm config set state-dir "E:\.pnpm-store\state"
pnpm config set global-dir "E:\.pnpm-store\global"
方法二(修改配置文件进行配置)
配置文件的目录在C:\Users\{USER}\AppData\Local\pnpm\config\rc(win11 pnpm8.6.3)
修改其为:
global-bin-dir=E:\.pnpm-store
cache-dir=E:\.pnpm-store\cache
state-dir=E:\.pnpm-store\state
global-dir=E:\.pnpm-store\global
执行pnpm c get检查配置是否正确,使用pnpm setup加载配置。
package.json
{
// 指定你的软件能够运行的 Node 版本和 pnpm 版本
"engines": {
"node": ">=10",
"pnpm": ">=3"
},
"pnpm": {
// 忽略依赖问题的警告
"peerDependencyRules": {
"ignoreMissing": ["@babel/*", "@eslint/*"]
}
}
}
参考源
pnpm的基本原理及快速使用的更多相关文章
- 几张图帮你理解 docker 基本原理及快速入门
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 do ...
- [转]docker 基本原理及快速入门
版权声明:原创作品, 来自海牛部落-青牛,http://hainiubl.com/topics/13 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud ...
- docker 基本原理及快速入门
作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来 ...
- pnpm凭什么这么快
前端包管理器层出不穷,pnpm算是一个后起之秀.它和npm有什么不同,为什么有了npm还要造一个pnpm? npm的问题 npm是最早的包管理器,安装nodejs自带npm,v3版本之前,npm安全依 ...
- .NET Core微服务之ASP.NET Core on Docker
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...
- windows 下部署 .netcore 到 docker
前面我们演示了如何将 Asp.Net Core 程序部署到 iis 和 部署到 windows 服务.其实前面的都是铺垫,如何将 Asp.Net Core 站点部署到 docker 才是这个系列文章的 ...
- linux 下安装 docker 环境
一分钟了解 Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
- 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率
无论是 vue2 全家桶还是 vue3 + vite + TypeScript,组件库的使用几乎大家都会,但自己开发一个独立组件库就不是每个人都掌握的,因为搭建组件库的基础开发环境,就会让很多同学望而 ...
- pnpm 快速节省磁盘工具的包管理工具
nodejs 相关的包管理工具有很多,我们常用的有 npm cnpm(我基本已经不用了),yarn... pnpm 是另外一个不错的包管理工具,包含以下特性 快速 节省空间,一个版本的包只会在磁盘中存 ...
- 快速新建并配置一个eslint+prettier+husky+commitlint+vue3+vite+ts+pnpm的项目
前置准备 一台电脑 vscode pnpm vscode插件:ESLint v2.2.6及以上 vscode插件:Prettier - Code formatter v9.5.0及以上 vscode插 ...
随机推荐
- 快速上手系列:HTML
一 HTML 基本元素 基本结构 <html> <head> <meta http-equiv="Content-Type" content=&quo ...
- Python机器学习笔记:CART算法实战
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 前言 在python机 ...
- Arch Linux 安装手记
背景 今天尝试安装龙芯版 Linux,本来希望能安装 Debian 版,但只找到一些文档,没找到可安装版的 ISO. 后来顺着这篇文章找到了Arch Linux,就尝试安装了一下. 安装后发现竟然不会 ...
- Linux服务器下启动和关闭node
首先将node工程的代码和node_modules目录上传到服务器的某一个目录下 1.用forever 进行管理 前提:linux下已经安装了node npm install -g forever / ...
- LocalDate获取指定月的上个月的第一天和最后一天
LocalDate date = LocalDate.of(2022, 8, 30); LocalDate lastMonth = date.minusMonths(1); // 当前月份减1 Loc ...
- Java字符串比较 == 和 equals方法的区别
今天在排除一个bug的时候出现了一个很低级但是也很容易被忽视的错误,在此写了一个小例子做记录. 首先我先说一下错误的场景,我读取了一段json数据,并使用JSONObject的实例对象的getStri ...
- #trie,树链剖分#洛谷 6088 [JSOI2015]字符串树
题目 分析 显然树上的问题可以转换成根节点到两点的答案减去2倍根节点到LCA的答案 化边为点,考虑子节点承接父节点的trie,再加入一条新的字符串, 在循环的过程中统计一个位置被多少个字符串经过, 这 ...
- OpenHarmony Meetup 深圳站招募令
OpenHarmony Meetup城市巡回深圳站火热来袭!! 日期:2023年10月15日14:00 地点:深圳市福田区上步路中路1003号 深圳市科学馆 与OpenHarmony技术大咖近距离 ...
- OpenHarmony应用开发—ArkUI组件集合
介绍 本示例为 ArkUI 中组件.通用.动画.全局方法的集合. 效果预览 使用说明: 1.点击组件.通用.动画.全局方法四个按钮或左右滑动切换不同视图. 2.点击二级导航(如通用属性.通用事件等), ...
- 本周四晚19:00知识赋能第八期第2课丨ArkUI自定义组件
9月21日19:00~20:00,第八期知识赋能第2节直播就要开始啦!本次直播将为同学们带来涂鸦小游戏的趣味体验,让大家全面了解ArkUI框架的应用,帮助你们在自己已有专业的基础上拓宽知识边界,学习 ...