为什么使用pnpm
前言
在一个 node 项目中免不了 node_modules 依赖,假设项目 A 用的了 Express 依赖,同时项目 B 也用到了 Express,并且两者所存放的位置不同,那么磁盘空间将会多出两份 Express 依赖,假设有 100 个项目,那么将会有有 100 倍的空间被浪费。这些空间还可以用磁盘空间来弥补,但是这 100 个项目如果都使用 npm i 去下载同样版本依赖,则是实实在在耗费网络资源去下载。
pnpm 能解决以下两点问题
- 包安装速度极快;
- 磁盘空间利用非常高效。
而这些问题是一个 node 项目中常有的。相信此时的你都有点蠢蠢欲动了,而安装也很简单
安装
请查阅你的 node 版本与 pnpm 是否匹配 安装 | pnpm
npm install -g pnpm
升级
pnpm add -g pnpm
此时 pnpm 就已经安装完了,与 yarn 安装一样,都感觉没安装似的。
使用
pnpm 命令几乎与 npm 一样,设置配置的方式也与 npm 相同,这里不妨尝试通过 pnpm 去下载 express 依赖,打开 CMD,将路径改成你平时写 js 代码的地方,切记不要在 C 盘路径下,不然将会在C:\Users\{userDir}\.pnpm-store\v3
去管理你的所有依赖,至于为什么后文会说,这里选择 F 盘进行安装,安装结果如下。
不难看出,它将依赖存放至F:\.pnpm-store\v3
下,但此时查看项目目录的 node_modules 文件夹
发现express
与mime-types
的右侧带了回车符,而这两个文件夹实际上是 window 的硬链接,而读取的就是存放在F:\.pnpm-store\v3
下的依赖。虽然查看 node_modules 属性会发现显示的空间貌似和原始的链接所占用的空间一样,但其实是同一个位置,官方中常用问题中也有介绍到 常见问题 | pnpm,所以真不用担心磁盘空间的问题。
这时候去查看 F:\.pnpm-store\v3\files
会发现都是一堆数字与字母命名的文件夹,而依赖都存放至这些杂乱无章的文件名之中。同时.pnpm-store 是根据你所在驱动器(这里是 F 盘)下创建的,可以通过 pnpm store path
查看,也就是上文为什么说不要在 C 盘路径(包括桌面)去安装依赖了,所以不用担心 C 盘空间会越来越小(如果你的代码是在 C 盘编写的话,那当我没说)。
最后
不过还是要提醒一句,即便 pnpm 能解决磁盘问题,但还是存在一定的兼容性,如果一个项目是用 npm 或者 yarn 进行构建的,使用 pnpm 是绝对免不了一些问题,小问题暂时想不到,大问题无法运行,所以请三思再考虑对已有项目是否尝试升级 pnpm。
但我认为还是有必要尝试尝试下,不尝试,怎么能发现新大陆呢。
参考链接:关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn? - 掘金 (juejin.cn)
相关文章
- 1.什么是线程池?为什么要使用线程池
- 【说站】为什么推荐大家使用 Nginx 而不是 Apache?
- 【学习笔记】Git&Github的基本使用
- 为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解
- 小枫音乐播放器使用教程-为什么选择小枫音乐播放器?
- 使用Python实现Hassink方程来反演土壤碳氮比
- 使用PHPCompatibility进行PHP跨版本兼容性检查
- 为什么 url 通常使用域名而不是 IP 地址?
- PyTorch中的In-place操作是什么?为什么要避免使用这种操作?
- 使用spring-boot-starter-data-elasticsearch 设置了long,为什么却变成了keyword类型
- Oracle 视图 USER_DBFS_HS_PROPERTIES 官方解释,作用,如何使用详细说明
- Oracle 视图 V$LATCH_PARENT 官方解释,作用,如何使用详细说明
- 使用MongoDB的索引使用:优化查询效率(mongodb的索引)
- 使用JDBC操纵MS SQL Server(jdbcmssql)
- 在数据科学中使用 C 和 C++
- 25字文章标题:为什么使用Linux? Linux 至少需要的必备知识(linux至少需要)
- 使用 Oracle 将纵表变为横表(oracle纵表变横表)
- MySQL浮点类型详解:为什么避免使用浮点类型?(mysql中浮点类型)
- 提升程序性能,为何不用Redis缓存(为什么使用redis缓存)
- 系统使用Redis之所以被缓存系统使用一次性解决多头问题(为什么redis被缓存)
- 利用Redis实现实时排行榜称号(使用redis进行排名)
- 为什么MySQL不推荐使用枚举(mysql不推荐使用枚举)
- 使用Redis查询Key的小技巧(redis返回key的值)
- MySql中取前几行数据使用limit来完成
- 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法
- 防止jQueryajaxLoad使用缓存的方法小结
- jquery选择器使用详解