【pnpm】一种新型的包管理工具,我们为什么要使用它

发布时间 2023-07-03 23:59:16作者: wanglei1900

pnpm 学习笔记

pnpm 是一个高效的 JavaScript 包管理器,它使用硬链接和符号链接来保存存储空间。它还有一个严格的包隔离,这意味着你不会看到包之间的依赖关系。

安装 pnpm

你可以使用 npm 或者 yarn 来安装 pnpm:

npm install -g pnpm
# 或者
yarn global add pnpm

基本用法

基本和npm 的指令相同

1. 创建新项目
pnpm init

2. 安装依赖
pnpm install <package-name>

3. 安装项目所有依赖
pnpm install

4. 卸载依赖
pnpm uninstall <package-name>

5. 更新依赖
pnpm update <package-name>

6. 运行脚本
pnpm run <script-name>

7. 安装特定版本的依赖
pnpm install <package-name>@<version>

8. 安装开发依赖
pnpm install -D <package-name>

9. 查看已安装的依赖
pnpm list

pnpm 与 npm 和 yarn 的区别(为什么要使用pnpm)

pnpm、npm 和 yarn 都是 JavaScript 的包管理工具,它们之间有一些区别。下面是 pnpm 相对于 npm 和 yarn 的一些特点和优势:

  1. 安装速度:pnpm利用了符号链接(symlink)来共享依赖项,因此安装速度更快。当你在一个项目中多次安装相同的包时,pnpm 只需要下载一次,然后通过链接的方式在不同的项目中共享使用。这可以显著提高安装速度,特别是对于大型项目或者多个项目之间共享依赖的情况。

  2. 存储空间:pnpm 使用硬链接和符号链接来保存存储空间。相比之下,npm 和 yarn 在安装依赖时会将每个包都复制到项目的 node_modules 目录中,这会占用更多的磁盘空间。pnpm 利用链接的方式来共享包,因此可以显著减少磁盘空间的占用。相同的依赖项只会被安装一次,并在不同的项目之间共享。这对于包含多个项目的开发环境或CI/CD流水线来说特别有用。

  3. 并行安装:pnpm使用并行方式安装依赖项,这意味着可以在一个命令中同时安装多个依赖项,从而进一步提高安装的速度。

  4. 包隔离:pnpm 有一个严格的包隔离机制,这意味着每个项目都有自己的 node_modules 目录,并且不会看到其他项目的依赖关系。这可以避免包之间的冲突和版本问题,使得项目更加稳定和可靠。

  5. 兼容性:pnpm 兼容 npm或yarn 的包管理器,可以使用 npm 的配置文件(如 .npmrc)和命令(如 npm install)。这意味着你可以无缝地切换到 pnpm,而不需要修改项目的配置或者脚本。

pnpm-lock.yaml 文件

pnpm-lock.yaml 是 pnpm 包管理器生成的锁定文件。它类似于 npm 的 package-lock.json 或 yarn 的 yarn.lock 文件,用于记录项目的依赖关系和确保在不同环境中安装相同的包版本。

  1. 锁定依赖关系

    当你使用 pnpm 安装依赖时,它会自动生成 pnpm-lock.yaml 文件。这个文件包含了项目的依赖关系树,以及每个包的版本信息和依赖项的精确版本范围。这样,当你在不同的环境中重新安装依赖时,pnpm 会根据 pnpm-lock.yaml 文件来确保安装相同的包版本,以保持项目的一致性。

  2. 避免网络请求

    另一个 pnpm-lock.yaml 文件的好处是它可以避免不必要的网络请求。当你重新安装项目的依赖时,pnpm 会首先检查 pnpm-lock.yaml 文件,如果文件存在并且与当前环境匹配,它会直接使用本地缓存的包,而不需要再次从网络下载。这可以显著提高安装速度,特别是在网络较慢或不稳定的情况下。

  3. 版本控制和共享

    pnpm-lock.yaml 文件还可以用于版本控制和共享。将 pnpm-lock.yaml 文件包含在项目的版本控制系统中,可以确保团队成员在不同的开发环境中安装相同的包版本。这对于多人协作或者持续集成/持续部署环境非常有用。

  4. 注意事项

    • 不要手动编辑 pnpm-lock.yaml 文件,因为它是由 pnpm 自动生成和维护的。如果你需要更新依赖版本,应该使用 pnpm 的命令来进行操作,例如 pnpm update。

    • 当你切换到另一个分支或者合并代码时,记得先运行 pnpm install 来根据 pnpm-lock.yaml 文件重新安装依赖,以确保项目的一致性。

.npmrcw 文件

.npmrc 是 npm 的配置文件,用于配置 npm 包管理器的行为和设置。它是一个文本文件,通常位于项目的根目录下。

.npmrc 文件不是自动生成的,它是由开发者根据项目的需求手动创建和配置的。在你的项目中没有 .npmrc 文件的情况下,可能是因为你还没有需要特定配置的需求,或者你还没有手动创建和配置该文件。

.npmrc 文件的存在可以为你的项目提供一些额外的功能和配置选项。下面是一些常见的用途:

  1. 包管理器配置:.npmrc 文件可以用来配置 npm 包管理器的行为,例如设置代理、设置镜像源、设置缓存路径等。你可以在 .npmrc 文件中指定各种配置选项,以满足项目的特定需求。

  2. 包版本管理:.npmrc 文件可以用来管理包的版本。你可以在 .npmrc 文件中指定包的版本,例如 npm install lodash@4。这样,无论何时你运行 npm install lodash,都会安装 lodash 的 4.x 版本。

  3. 身份验证和访问权限:.npmrc 文件可以用来配置身份验证和访问权限。你可以在 .npmrc 文件中设置访问令牌或者用户名密码,以便在安装或发布包时进行身份验证。

pnpm-lock.yaml 和 .npmrcw 的区别

  • pnpm-lock.yaml 是 pnpm 包管理器生成的锁定文件,用于记录项目的依赖关系和确保在不同环境中安装相同的包版本。

  • .npmrc 是 npm 的配置文件,用于配置 npm 包管理器的行为和设置。

  • pnpm-lock.yaml 主要用于锁定依赖关系、避免网络请求和版本控制共享。

  • .npmrc 主要用于包管理器配置、包版本管理和身份验证访问权限。

pnpm 全局包的安装位置在不同操作系统上的区别

在不同的操作系统上,pnpm 包管理器的默认安装位置可能会有所不同。

在 macOS 上,pnpm 包管理器默认将包安装在用户的主目录下的 .pnpm-state 文件夹中。具体的路径是 ~/.pnpm-state。

.pnpm-state 文件夹是一个全局的包存储位置,用于存储所有项目的依赖包。当你在一个项目中安装包时,pnpm 会将包下载到 .pnpm-state 文件夹中,并在项目中创建一个符号链接来引用这些包。

这种设计有几个优点:

  • 节省磁盘空间:由于包是共享存储的,所以不同项目中相同的包只需要下载一次,可以节省磁盘空间。

  • 提高安装速度:由于包已经下载到 .pnpm-state 文件夹中,所以在安装相同的包时,pnpm 只需要创建符号链接,而不需要再次下载,可以提高安装速度。

  • 避免重复下载:当你在多个项目中使用相同的包时,pnpm 可以通过符号链接来共享已经下载的包,避免重复下载相同的包。

需要注意的是,.pnpm-state 文件夹是一个隐藏文件夹,你可以通过在终端中输入 ls -a ~/.pnpm-state 命令来查看它。

Windows

在 Windows 上,pnpm 包管理器默认将包安装在用户的主目录下的 .pnpm-store 文件夹中。具体的路径是 C:\Users{用户名}.pnpm-store。

.pnpm-store 文件夹是一个全局的包存储位置,用于存储所有项目的依赖包。当你在一个项目中安装包时,pnpm 会将包下载到 .pnpm-store 文件夹中,并在项目中创建一个符号链接来引用这些包。

这种设计与 macOS 上的安装位置类似,同样具有节省磁盘空间、提高安装速度和避免重复下载的优点。

需要注意的是,.pnpm-store 文件夹是一个隐藏文件夹,你可以通过在命令提示符中输入 dir /a C:\Users{用户名}.pnpm-store 命令来查看它。