pnpm的基本介绍

3,480 阅读3分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

什么是pnpm?

pnpm 本质上就是一个包管理器,它主要有两个优势:

  • 包安装速度极快;
  • 磁盘空间利用非常高效。

为什么叫pnpm?

因为pnpm作者对现有的包管理工具,尤其是npmyarn的性能特别失望,所以起名叫做perfomance npm,即pnpm(高性能npm)

pnpm安装

如果你已经安装了npm,想要切换的话,可以直接install

npm install -g pnpm

如果没有安装npm,但是已经有Node.js

在 Linux 或 macOS 下:

curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

在 Windows 下(使用PowerShell):

Invoke-WebRequest 'https://get.pnpm.io/v6.16.js' -UseBasicParsing -o pnpm.js; node pnpm.js add --global pnpm; Remove-Item pnpm.js

如果连Node.js都没有

在 Windows 下(使用PowerShell):

iwr https://get.pnpm.io/install.ps1 -useb | iex

pnpm命令的使用

pnpm install

安装项目所有依赖

pnpm install 或 pnpm i

pnpm add <pkg>

安装软件包及其依赖的任何软件包

命令描述
pnpm add <package>保存到 dependencies
pnpm add -D <package>保存到 devDependencies
pnpm add -O <package>保存到 optionalDependencies

pnpm update

根据指定的范围更新软件包的最新版本

pnpm update 或者 pnpm up

pnpm remove

node_modules 和项目的 package.json 中移除包。

pnpm remove
pnpm rm
pnpm uninstall
pnpm un

pnpm run

运行一个在 package的 manifest 文件中定义的脚本。

假如您有个 watch 脚本配置在package.json 中
"scripts": {
    "watch": "build-command --watch"
}

可以这样使用命令运行脚本
pnpm run watch

其他

安装最新版本的 Node.js

pnpm env use --global latest

pnpm升级

如果你安装了 pnpm,以后想升级就不需要在使用其他软件包管理器,因为它可以自己升级自己

pnpm add -g pnpm

卸载pnpm

在删除 pnpm CLI 之前,先删除所有由 pnpm 安装的全局包。

列出所有全局包,运行 pnpm ls -g

删除全局包的两种方法

  • 运行 pnpm rm -g <package>... 列出每个全局包。
  • 运行 pnpm root -g 找到全局目录的位置并手动删除它。

移除 pnpm CL

如果是使用 npm 安装的 pnpm,那就应该使用 npm 卸载 pnpm

npm rm -g pnpm

如果不是,可以直接使用

pnpm rm -g pnpm

pnpm 的相关配置文件

package.json文件

一个包的清单文件。 它包含包的所有元数据,包括依赖项、标题、作者等等。 这是所有主要的 Node.JS 包管理工具,包括 pnpm 的保留标准。

.npmrc文件

pnpm 从命令行、环境变量和 .npmrc 文件中获取其配置。

pnpm-workspace.yaml文件

定义了 工作空间的根目录,并能够使你从从工作空间中包含 / 排除目录 。 默认情况下,包含所有子目录。

.pnpmfile.cjs文件

pnpm 允许你通过特殊功能(钩子)直接挂钩到安装过程。 钩子可以在名为 .pnpmfile.cjs 的文件中声明。

Lockfile

pnpm生成的pnpm-lock.yaml文件

注意

  • 注意编译环境的node版本,pnpm依赖node 14以上的版本,需要升级编译环境的node到14以上。

参考资料:

pnpm官方文档

为什么要用pnpm?


🎨【点赞】【关注】不迷路,更多前端干货等你解锁

往期推荐

👉 JavaScript的Proxy代理怎么用?

👉 JS中的getter和setter你会用吗?

👉 深入理解ES6箭头对象

👉 JS的装饰器模式实例分析