6月2日 01:46

npm 是什么?包管理器核心概念和 package.json 详解

npm(Node Package Manager)是 Node.js 的默认包管理器,负责安装、管理和发布 JavaScript 包。npm 由三部分组成:命令行工具、在线仓库(registry)和网站(npmjs.com)。

npm 做什么

安装别人写的包npm install react 从 registry 下载 react 及其依赖到 node_modules 目录。一个项目通常有几十到上百个依赖,手动下载不现实。

管理项目依赖:package.json 记录项目需要哪些包和版本范围,package-lock.json 锁定精确版本。任何人 clone 项目后 npm install 就能还原相同的依赖。

运行脚本:package.json 的 scripts 字段定义常用命令:

json
{ "scripts": { "dev": "vite", "build": "vite build", "test": "jest" } }

npm run dev 执行 vite 命令,比手动敲完整命令方便。npm 自动把 node_modules/.bin 加到 PATH,不用全局安装工具。

发布自己的包npm publish 把代码上传到 registry,其他人就能 npm install 使用。

package.json 核心字段

json
{ "name": "my-app", "version": "1.0.0", "dependencies": { "react": "^18.2.0" }, "devDependencies": { "jest": "^29.0.0" }, "scripts": { "start": "node index.js" } }
  • dependencies:生产环境需要的包(React、Express)
  • devDependencies:开发环境需要的包(测试工具、构建工具)
  • 安装时 npm install -D 写入 devDependencies,npm install 写入 dependencies

node_modules 的结构

npm install 把所有包下载到 node_modules 目录。包之间可以互相依赖,形成依赖树。npm 3+ 用扁平结构——尽量把依赖提升到顶层 node_modules,减少嵌套。

node_modules 通常很大(几百 MB),不要提交到 Git。.gitignore 里加上 node_modules/

npm vs yarn vs pnpm

  • npm:Node.js 自带,零配置,生态兼容性最好
  • Yarn:Facebook 出品,早期比 npm 快,现在差距不大。Yarn 1 已停止维护
  • pnpm:用硬链接共享包文件,磁盘占用少 3-5 倍,安装速度最快

新项目推荐 pnpm 或 npm。已有项目没必要迁移。

初始化项目

bash
mkdir my-project && cd my-project npm init -y # 生成默认 package.json npm install express # 安装第一个依赖

npm init -y 跳过交互式提问,直接用默认值生成 package.json。

标签:NPM