pnpm add 和 pnpm install 的区别?

文章目录

      • [1. pnpm add](#1. pnpm add)
      • [2. pnpm install](#2. pnpm install)
      • [3. 总结](#3. 总结)
      • 应用场景
      • 示例

在使用 pnpm 管理项目依赖时, pnpm addpnpm install 是两个常用的命令,但它们的功能和使用场景有所不同。以下是详细的解释:


1. pnpm add

功能 :用于向项目的 package.json 文件中添加新的依赖项,并安装这些依赖项。

特点

  • 添加依赖 :会将指定的包添加到 dependenciesdevDependenciesoptionalDependencies 中。
  • 自动安装 :不仅会更新 package.json,还会立即安装新添加的依赖项。
  • 灵活性 :可以通过参数指定依赖项的类型(如 --save-dev 添加到 devDependencies)。

常用选项

  • --save-dev-D:将包添加到 devDependencies
  • --save-peer-P:将包添加到 peerDependencies
  • --save-optional-O:将包添加到 optionalDependencies
  • --save-exact-E:保存精确版本号。

示例

bash 复制代码
# 添加一个新的生产依赖项
pnpm add react react-dom

# 添加一个新的开发依赖项
pnpm add --save-dev @types/react @types/react-dom

# 添加并保存精确版本号
pnpm add --save-exact lodash

2. pnpm install

功能 :根据 package.json 文件中的依赖项列表安装所有依赖项。

特点

  • 安装现有依赖 :不会修改 package.json,只是根据已有的依赖项列表安装所需的包。
  • 适用于多种场景 :常用于克隆仓库后首次安装依赖,或者在更改了 package.json 后重新安装所有依赖项。
  • 处理锁文件 :会根据 pnpm-lock.yaml 文件确保安装的依赖项版本一致。

示例

bash 复制代码
# 安装所有依赖项
pnpm install

# 安装特定版本的依赖项(如果需要)
pnpm install react@18.3.1 react-dom@18.3.1

3. 总结

  • pnpm add :用于添加新的依赖项并安装它们,同时更新 package.json
  • pnpm install :仅用于安装 package.json 中已列出的依赖项,不会修改 package.json

应用场景

  • 开发过程中添加新依赖 :使用 pnpm add 来添加新的库或工具,并确保它们被记录在 package.json 中。
  • 初始设置或更新依赖 :使用 pnpm install 来安装所有现有的依赖项,特别是在克隆仓库或更新 package.json 后。

示例

假设你想要添加一个新的开发依赖项 typescript,你可以使用以下命令:

bash 复制代码
pnpm add --save-dev typescript

这将更新 package.json 并安装该插件。

如果你只是想确保所有现有依赖项都已正确安装,可以运行:

bash 复制代码
pnpm install

这将根据 package.jsonpnpm-lock.yaml 安装所有必要的依赖项。

相关推荐
Flynt8 小时前
React Router v8 升了之后,我花了两天才把项目跑起来
前端·typescript·preact
泯泷15 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree15 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
里欧跑得慢16 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢16 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼16 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷17 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷17 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷17 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法
泯泷17 小时前
手搓JSVM第 3 篇:从栈式 VM 到寄存器式 VM:为什么我们选择寄存器
前端·javascript·算法