返回今日新知
编辑整理工具与生态入门
登录后收藏

包管理器:npm、yarn 和 pnpm

别人写好的功能,一条命令就能拿来用。npm install 背后发生了什么?

7 分钟2026年8月8日本站原创整理0 次阅读

为什么需要包管理器

写程序时,很多功能别人已经写好了:日期处理、HTTP 请求、加密解密。你不必从零写,直接拿来用。这些可复用的代码包叫「包」(package)或「库」(library)。

「包管理器」就是帮你安装、更新、删除这些包的工具。它解决三个问题:

  1. **从哪拿**:有个公共仓库(npm registry),所有人把包发布上去。
  2. **怎么装**:一条命令自动下载到项目。
  3. **依赖管理**:A 包依赖 B 包,B 依赖 C,自动帮你装全。

npm:Node.js 自带

npm(Node Package Manager)是 JavaScript 最主流的包管理器,装 Node.js 时自动带上。

常用命令:

npm install            # 安装 package.json 里所有依赖
npm install 包名       # 安装某个包
npm install -D 包名    # 安装开发依赖(只在开发时用)
npm uninstall 包名     # 卸载
npm update            # 更新所有包
npm run dev           # 运行 package.json 里定义的脚本

安装包后,代码里就可以引入:

import { format } from "date-fns";  // 用 date-fns 处理日期
console.log(format(new Date(), "yyyy-MM-dd"));

package.json:项目的清单

每个项目根目录有 `package.json`,记录:

  • 项目名称、版本。
  • 依赖了哪些包及版本。
  • 可运行的脚本(如 `dev`、`build`、`lint`)。
{
  "name": "vibe-coding-daily",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "lint": "eslint ."
  },
  "dependencies": {
    "next": "^16.3.1",
    "react": "^19.2.0"
  }
}

`npm run dev` 就是执行 `scripts` 里的 `dev` 命令(实际跑 `next dev`)。

node_modules:包的家

安装的包放在 `node_modules` 文件夹。这个文件夹很大(常常几百 MB),**不要提交到 Git**,靠 `.gitignore` 忽略:

node_modules/

别人拿到你的代码后,运行 `npm install`,根据 `package.json` 自动重建 `node_modules`。

package-lock.json:锁定版本

`package.json` 里版本号前的 `^` 表示「兼容大版本」:`^16.3.1` 允许装 16.x 的任何版本。这意味着不同时间安装可能拿到不同的小版本,可能导致「在我电脑上能跑,你那里不行」。

`package-lock.json` 锁定每个包的精确版本和依赖树,确保所有人装的一模一样。这个文件**要提交到 Git**。

yarn 和 pnpm:替代品

npm 之外还有两个流行选择:

**yarn**:Facebook 开发,早期比 npm 快。现在差距小了。

**pnpm**:用硬链接节省磁盘空间,装得快,适合大型项目。

三者命令对比:

| 操作 | npm | yarn | pnpm |
|---|---|---|---|
| 安装所有 | `npm install` | `yarn` | `pnpm install` |
| 装一个包 | `npm install 包` | `yarn add 包` | `pnpm add 包` |
| 运行脚本 | `npm run dev` | `yarn dev` | `pnpm dev` |

选哪个都行,本站用 npm。

全局安装 vs 本地安装

npm install -g 包名    # 全局安装,命令行任何地方都能用
npm install 包名       # 本地安装,只在当前项目用

全局安装的通常是命令行工具(如 `vercel` CLI)。项目依赖都本地安装,避免污染全局环境。

小白记住

  • `npm install` 装依赖,`npm run dev` 跑项目。
  • `package.json` 是清单,`node_modules` 是仓库,`package-lock.json` 是锁。
  • `node_modules` 不提交,`package.json` 和 `package-lock.json` 要提交。

理解包管理器,你就能看懂 AI 说的「先装个 lodash」「在 dependencies 里加了 xxx」是什么意思。