Node.js 包管理:npm 与 yarn 命令
在使用 Node.js 开发项目时,安装、更新和管理第三方代码库(即“包”) 是每天都要做的事。目前最主流的两种工具是 npm 和 yarn。它们功能高度重合,但命令写法和行为细节略有不同。本文直接列出你必须掌握的核心命令,并说明两者差异,让你在任何项目中都能快速上手。
初始化一个新项目
无论是用 npm 还是 yarn,第一步都是创建一个项目描述文件 package.json。
-
打开终端,进入你的项目文件夹。
-
执行初始化命令:
-
使用 npm:
npm init -y -
使用 yarn:
yarn init -y
-y参数表示跳过所有交互提问,直接生成默认配置的package.json文件。 -
-
检查结果:当前目录下会多出一个
package.json文件,里面包含项目名称、版本等基本信息。
安装依赖包
开发中需要引入外部库(如 lodash、express 等),这时就要安装依赖。
安装生产依赖(项目运行必需)
-
执行安装命令:
-
npm:
npm install express或简写为:
npm i express -
yarn:
yarn add express
-
-
观察变化:
- 包会被下载到
node_modules/文件夹。 package.json中的dependencies字段会新增"express": "版本号"。- npm 会生成或更新
package-lock.json;yarn 会生成或更新yarn.lock。
- 包会被下载到
安装开发依赖(仅开发时需要,如测试工具)
-
执行带
-D或--dev的命令:-
npm:
npm install eslint --save-dev或简写:
npm i eslint -D -
yarn:
yarn add eslint --dev
-
-
验证结果:
package.json中的devDependencies字段会新增该包。
安装项目已有依赖
当你从 Git 克隆一个已有项目时,通常只有 package.json 和锁文件,没有 node_modules。
-
执行安装命令:
-
npm:
npm install -
yarn:
yarn install或简写为:
yarn
-
-
工具行为:
- 两者都会读取各自的锁文件(
package-lock.json或yarn.lock)来精确还原依赖版本。 - 如果你删除了
node_modules,这个命令能重新构建它。
- 两者都会读取各自的锁文件(
卸载包
不再需要某个包时,要彻底移除它。
-
执行卸载命令:
-
npm:
npm uninstall lodash或简写:
npm un lodash -
yarn:
yarn remove lodash
-
-
确认效果:
- 该包从
node_modules/中删除。 package.json和锁文件中的记录也被清除。
- 该包从
全局安装工具
有些命令行工具(如 nodemon、typescript 编译器)需要全局安装,以便在任何目录使用。
-
执行全局安装:
-
npm:
npm install -g nodemon -
yarn:
yarn global add nodemon
-
-
注意差异:
- npm 的全局包通常放在系统路径(如
/usr/local/bin)。 - yarn 的全局包位置可通过
yarn global bin查看,有时需手动将该路径加入系统PATH才能直接使用命令。
- npm 的全局包通常放在系统路径(如
查看和更新包
保持依赖最新可修复安全漏洞或获取新功能。
查看过时的包
-
npm:
npm outdated -
yarn:
yarn outdated
更新单个包
-
指定包名更新:
-
npm:
npm update express -
yarn:
yarn upgrade express
-
更新所有包
-
npm:
npm update -
yarn:
yarn upgrade
重要提示:
update/upgrade默认只更新到符合package.json中版本范围(如^1.2.3)的最新版,不会跨大版本。若要强制升级到最新大版本,需重新执行add或install命令。
运行脚本
package.json 中的 scripts 字段定义了常用命令(如启动、测试)。两者调用方式一致。
-
查看可用脚本:打开
package.json,找到scripts部分,例如:"scripts": { "start": "node server.js", "test": "jest" } -
执行脚本:
-
npm:
npm run start对于
start、test、stop等内置脚本,可省略run:npm start -
yarn:
yarn startyarn 无需写
run,所有脚本都直接跟名字。
-
锁文件机制对比
虽然 npm 和 yarn 都能管理依赖,但底层机制影响协作一致性。
| 特性 | npm (package-lock.json) |
yarn (yarn.lock) |
|---|---|---|
| 是否记录完整依赖树 | 是 | 是 |
| 是否保证团队安装完全一致 | 是(v5+) | 是 |
| 安装速度 | 较慢(尤其早期版本) | 较快(并行下载) |
| 离线安装支持 | 需额外配置 | 原生支持(缓存机制强) |
实际开发中,团队应统一使用同一种工具,避免同时提交两种锁文件导致冲突。
切换工具的注意事项
如果你接手一个项目,发现它用的是另一种包管理器:
- 不要混用:如果项目有
yarn.lock,就用yarn;如果有package-lock.json,就用npm。 - 删除对方锁文件:若决定切换工具,先删除原有的锁文件和
node_modules,再用新工具重新安装。 - 提交新锁文件:切换后,务必提交新生成的锁文件到 Git,确保团队一致。
常见问题处理
安装卡住或超时
-
npm:换国内镜像源
npm config set registry https://registry.npmmirror.com -
yarn:换源
yarn config set registry https://registry.npmmirror.com
清除缓存
-
npm:
npm cache clean --force -
yarn:
yarn cache clean
强制重新安装
-
删除
node_modules和锁文件:rm -rf node_modules package-lock.json # npm 用户 rm -rf node_modules yarn.lock # yarn 用户 -
重新安装:
npm install # 或 yarn

暂无评论,快来抢沙发吧!