pnpm的安装及其使用教程(汇总)

 更新时间:2023年12月05日 14:50:35   作者:任磊abc  
pnpm是 Node.js 的替代包管理器,它是 npm 的直接替代品,速度更快、效率更高,它由 npm/yarn 衍生而来,但却解决了 npm/yarn 内部潜在的 bug,并且极大了地优化了性能,本文给大家介绍pnpm的安装及其使用,感兴趣的朋友一起看看吧

1、pnpm是什么

pnpm (performant npm,意思是高性能的 npm)是 Node.js 的替代包管理器。它是 npm 的直接替代品,速度更快、效率更高。为什么效率更高?当你安装一个包时,pnpm 将它保存在你机器上的一个全局存储中,然后我们从它创建一个硬链接而不是复制。对于模块的每个版本,磁盘上只保存一个副本。

例如,当使用 npm 或 yarn 时,如果您有 100 个使用 lodash 的包,那么磁盘上将有 100 个 lodash 副本。Pnpm 可让您节省千兆字节的磁盘空间!

它由 npm/yarn 衍生而来,但却解决了 npm/yarn 内部潜在的 bug,并且极大了地优化了性能

2、特性有哪些

(1)速度快

官方的benchmark 数据是这样的,但是实际使用发现pnpm的第一次下载包速度跟yarn是差不多的,其优势体现在第二次下载相同的包更快

(2)高效利用磁盘空间

pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于
1、不会重复安装同一个包。用 npm/yarn 的时候,如果 100 个项目都依赖 lodash,那么 lodash 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但在使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用 hardlink(硬链接)
2、即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件

(3)*支持monorepo

随着前端工程的日益复杂,越来越多的项目开始使用 monorepo。之前对于多个项目的管理,我们一般都是使用多个 git 仓库,但 monorepo 的宗旨就是用一个 git 仓库来管理多个子项目,所有的子项目都存放在根目录的packages目录下,那么一个子项目就代表一个package。

3、pnpm依赖原理

npm、yarn安装包的问题

在 pnpm 出现以前,npm 和 yarn 为了提高包的复用率,都采用了扁平化的装包策略。扁平化的安装方式会导致我们的 node_modules 文件夹和 package.json 存在很大的出入,比如你install一个包 express,但是你的node_modules下会有很多包
这个时候会有一些问题

(1)幽灵依赖

从目前的包引用方式来说,inport的时候我们会从node_modules的文件夹中寻找,按照上面的图中所示,如果我们在package.json中没有accepts,其实我们也是可以引用到的,因为她确实存在,这时候我们访问的就是未申明npm包,如果某一天express主包不再依赖accepts,这个时候项目就会有依赖缺失的问题。 我们把这种主包依赖的子包,未被申明而在项目中使用,可以理解成是主包夹带的包,我们称之为 幽灵依赖。

(2)包版本的不确定性

这个很好理解,如果A、B两个主包都依赖accepts包,但是A依赖accepts@1.0,B依赖accepts@2.0 ,那node_modules下的扁平结构是展示1.0 还是 2.0 呢?目前的方式是谁后安装的谁就显示。 这种不确定性在开发中引起的问题也不在少数 「别人用这个包可以解决这个问题,但是我安装这个包就不能解决」,往往就是这个原因导致的

(3)依赖重复安装

这个也很好理解,AB都依赖accepts,依赖不同的版本,无论node_modules的顶层提升了哪个版本,这个包都是会被安装两次的。

4、pnpm的安装、使用

1、安装

// 全局安装npm install pnpm -g

2、查看源

pnpm config get registry 

3、切换淘宝源

pnpm config set registry https://registry.npmmirror.com/

4、使用

pnpm install 包 // 安装依赖
pnpm i  包      // 安装依赖
pnpm add 包     // -S  默认写入dependencies
pnpm add -D     // -D devDependencies
pnpm add -g     // 全局安装

5、移除

pnpm remove 包               // 移除包
pnpm remove 包 --global      // 移除全局包

6、 更新

pnpm up                      // 更新所有依赖项
pnpm upgrade 包              // 更新包
pnpm upgrade 包 --global     // 更新全局包

注意:pnpm不会自动下载依赖中使用的其他依赖,npm和cnpm可以自动下载依赖中的其他依赖,这涉及到依赖链的问题,pnpm会先检查共享存储库,如果有该依赖则创建符号链接(即硬链接)定位到共享存储库中的依赖,不会重复的去下载。npm则是每个项目都是单独下载的依赖。

7、 如果希望自动下载依赖中的依赖 则可以使用

pnpm recursive install

8、 pnpm 还提供了其他一些命令来管理依赖,例如:

pnpm recursive add <package>:在项目及其子项目中添加依赖
pnpm recursive update:更新所有依赖

最后附上官网地址:Motivation | pnpm

补充:

pnpm的安装和使用(全网最详细)

pnpm 是一款磁盘空间高效的软件包管理器。
当使用 npm 或 Yarn 时,如果你有 1000个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本。然而,如果是使用 pnpm,依赖包将被存放在一个统一的位置,因此以项目和依赖包的比例来看,使用 pnpm 将节省大量的硬盘空间,并且安装速度也能大大提高,目前,pnpm 已发布 6.8.0 版本,此版本包含许多新功能、性能优化以及错误修复,主要更新内容如下:

  • pnpm 号称是同类工具速度的将近 2 倍
  • node_modules 中的所有文件均链接自单一存储位置
  • pnpm 内置了对单个源码仓库中包含多个软件包的支持
  • pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问
  • pnpm:官网传送门https://pnpm.io/zh/motivation

一、先安装

Node环境(✔️)
npm环境(✔️)

二、安装pnpm

npm install -g pnpm

设置镜像源

pnpm config set registry https://registry.npm.taobao.org/
# 检查
pnpm config get registry

常用命令

# 查看ts-node的所有版本
pnpm view ts-node versions
# 等价与npm i nodemon -g
pnpm add nodemon -g
# npm i
pnpm i
# 查看依赖(全局)
pnpm list [-g]
# 较好用的地方是: npm run dev/test/build
pnpm dev
# 当然习惯npm的也可以用 pnpm run dev

到此这篇关于pnpm的安装及其使用的文章就介绍到这了,更多相关pnpm安装使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于uniapp与node.js实现的微信授权登录功能实例

    基于uniapp与node.js实现的微信授权登录功能实例

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术,下面这篇文章主要给大家介绍了关于如何基于uniapp与node.js实现的微信授权登录功能的相关资料,需要的朋友可以参考下
    2023-05-05
  • nodejs实现登陆验证功能

    nodejs实现登陆验证功能

    这篇文章主要为大家详细介绍了nodejs实现登陆验证功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Node.js使用定时器的三种方法

    Node.js使用定时器的三种方法

    在Node.js中使用定时器是一项常见且重要的任务,本文主要介绍了Node.js使用定时器的三种方法,包括setTimeout、setInterval和setImmediate等方法,感兴趣的可以了解一下
    2024-02-02
  • 在CentOS 7服务器上安装Node.js的方法步骤

    在CentOS 7服务器上安装Node.js的方法步骤

    Node.js 是一个用于服务器端编程的 JavaScript 平台,允许用户快速构建网络应用程序,通过在前端和后端都使用 JavaScript,开发可以更加一致并且可以在同一个系统中设计,在本指南中,我们将向您展示如何在 Ubuntu 14.04 服务器上开始使用 Node.js
    2024-09-09
  • Node.js+Express+Vue+MySQL+axios的项目搭建全过程

    Node.js+Express+Vue+MySQL+axios的项目搭建全过程

    这篇文章主要介绍了Node.js+Express+Vue+MySQL+axios的项目搭建全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Nodejs实现批量下载妹纸图

    Nodejs实现批量下载妹纸图

    这篇文章主要介绍了使用Nodejs实现批量下载妹纸图的方法和详细代码,十分的实用,喜欢妹纸的小伙伴们可以参考下。
    2015-05-05
  • Node卸载超详细步骤(附图文讲解!)

    Node卸载超详细步骤(附图文讲解!)

    由于之前的node为8.0版本,不太满足需求,所以需要安装高版本的node,下面这篇文章主要给大家介绍了关于Node卸载超详细步骤的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Node koa服务器实现获取客户端ip

    Node koa服务器实现获取客户端ip

    这篇文章主要为大家详细介绍了Node koa服务器实现获取客户端ip的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下
    2025-02-02
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一个简洁、灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用,本篇文章给大家介绍nodejs的express使用教程,感兴趣的朋友参考下
    2015-11-11
  • Node.js抓取网站中文乱码解决办法

    Node.js抓取网站中文乱码解决办法

    这篇文章主要介绍了Node.js抓取网站中文乱码解决办法,需要的朋友可以参考下
    2023-02-02

最新评论