npm 包管理
npm(Node Package Manager)是 Node.js 的包管理工具。
常用命令
bash
npm init # 初始化项目,创建 package.json
npm install <pkg> # 安装包
npm install <pkg> --save # 安装并添加到 dependencies
npm install <pkg> --save-dev # 安装并添加到 devDependencies
npm install -g <pkg> # 全局安装
npm update <pkg> # 更新包
npm uninstall <pkg> # 卸载包
npm run <script> # 运行脚本
npm search <keyword> # 搜索包
npm info <pkg> # 查看包信息
npm list # 列出已安装的包
npm outdated # 列出可更新的包
npm audit # 检查安全漏洞
npm publish # 发布包
npm login / npm logout # 登录/注销npm init # 初始化项目,创建 package.json
npm install <pkg> # 安装包
npm install <pkg> --save # 安装并添加到 dependencies
npm install <pkg> --save-dev # 安装并添加到 devDependencies
npm install -g <pkg> # 全局安装
npm update <pkg> # 更新包
npm uninstall <pkg> # 卸载包
npm run <script> # 运行脚本
npm search <keyword> # 搜索包
npm info <pkg> # 查看包信息
npm list # 列出已安装的包
npm outdated # 列出可更新的包
npm audit # 检查安全漏洞
npm publish # 发布包
npm login / npm logout # 登录/注销配置
bash
npm config list # 列出所有配置
npm get registry # 查看镜像源
npm set registry <url> # 设置镜像源npm config list # 列出所有配置
npm get registry # 查看镜像源
npm set registry <url> # 设置镜像源package.json
| 字段 | 说明 |
|---|---|
name | 项目名称 |
version | 版本号(语义化:大版本.次版本.修订号) |
description | 描述 |
main | 入口文件 |
scripts | 脚本命令 |
dependencies | 运行时依赖 |
devDependencies | 开发依赖 |
peerDependencies | 同版本依赖 |
npm install 原理
安装流程
- 检查
package-lock.json是否有缓存 - 扁平化安装依赖到
node_modules - 优先
.bin,再@系列,按字母顺序 - 广度优先遍历依赖树
扁平化安装
- 理想状态:二级模块与一级模块版本相同,复用到一级
- 非理想状态:版本不同,则嵌套安装到自己的
node_modules
package-lock.json
- 锁定版本号
- 记录依赖树详细信息(
version、resolved、integrity) - 加速安装(通过
name + version + integrity生成缓存 key)
npm run 原理
- 读取
package.json的scripts找到对应命令 - 先从
node_modules/.bin查找可执行文件 - 没找到则去全局
node_modules查找 - 再去环境变量查找
生命周期
json
{
"predev": "node prev.js",
"dev": "node index.js",
"postdev": "node post.js"
}{
"predev": "node prev.js",
"dev": "node index.js",
"postdev": "node post.js"
}执行 npm run dev 时,predev → dev → postdev 依次自动执行。
npx
npx 用于执行 node 包中的可执行文件,无需全局安装。
优势:
- 避免全局安装
- 总是使用最新版本
- 可执行任意 npm 包
示例:
bash
npx create-react-app my-app # 无需全局安装脚手架
npx vite # 运行本地安装的 vitenpx create-react-app my-app # 无需全局安装脚手架
npx vite # 运行本地安装的 vite发布 npm 包
- 编写模块代码
npm login登录npm publish发布npm version <patch|minor|major>更新版本
Cao Note