npm 包管理工具教程
npm(Node Package Manager)是 Node.js 的包管理工具,是全球最大的 JavaScript 模块生态系统。它可以帮助开发者快速安装、管理、更新和发布依赖包,极大地简化了前端和 Node.js 项目的开发流程。
一、npm 基础介绍
1. 什么是 npm
- npm 全称 Node Package Manager,是 Node.js 官方提供的包管理器
- 相当于前端的 Maven,用于管理项目依赖
- 包含命令行工具和在线仓库(npmjs.com)
2. npm 的安装
npm 会随着 Node.js 一起安装,无需单独安装。可以通过以下命令检查 npm 版本:
npm -v
二、项目初始化与配置
1. 创建新项目
# 创建项目目录
mkdir my-project
cd my-project
# 初始化项目(交互式)
npm init
# 快速初始化(使用默认配置)
npm init -y
# 或
npm init --yes
执行 npm init 后,npm 会引导你填写以下信息:
- name: 项目名称
- version: 版本号(默认 1.0.0)
- description: 项目描述
- entry point: 入口文件(默认 index.js)
- test command: 测试命令
- git repository: Git 仓库地址
- keywords: 关键词
- author: 作者信息
- license: 许可证
2. package.json 文件结构
初始化完成后,会生成一个 package.json 文件,包含项目的基本信息和依赖配置:
{
"name": "my-project",
"version": "1.0.0",
"description": "My awesome project",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {}
}
三、依赖管理
1. 安装依赖
安装生产依赖
# 安装指定包
npm install 包名
# 简写
npm i 包名
# 安装指定版本
npm install 包名@版本号
# 精确安装版本(不使用 ^ 或 ~)
npm install --save-exact 包名
# 简写
npm i -E 包名
安装开发依赖
npm install 包名 --save-dev
# 简写
npm i 包名 -D
全局安装
npm install 包名 -g
# 简写
npm i 包名 -g
安装 package.json 中的所有依赖
npm install
# 简写
npm i
2. 卸载依赖
# 卸载本地依赖
npm uninstall 包名
# 简写
npm un 包名
# 卸载开发依赖
npm uninstall 包名 --save-dev
# 卸载全局依赖
npm uninstall 包名 -g
3. 更新依赖
# 检查可更新的包
npm outdated
# 更新指定包
npm update 包名
# 更新所有包
npm update
# 更新全局包
npm update -g 包名
4. 查看依赖
# 查看已安装的包(树状结构)
npm list
# 简写
npm ls
# 查看顶层依赖(不显示子依赖)
npm list --depth=0
# 查看全局安装的包
npm list -g
四、npm 配置管理
1. 镜像源配置
# 查看当前镜像源
npm config get registry
# 设置为淘宝镜像
npm config set registry https://registry.npmmirror.com/
# 设置为官方镜像
npm config set registry https://registry.npmjs.org/
# 删除配置项
npm config delete registry
2. 其他常用配置
# 查看 npm 配置
npm config list
# 编辑 npm 配置文件
npm config edit
# 设置用户信息
npm config set user.name "Your Name"
npm config set user.email "your.email@example.com"
# 查看全局包安装路径
npm root -g
五、npm 脚本
1. 定义脚本
在 package.json 的 scripts 字段中定义脚本:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"build": "webpack",
"test": "jest"
}
2. 运行脚本
npm run 脚本名称
# 特殊脚本可以省略 run
npm start
npm test
npm stop
npm restart
3. 环境变量设置
临时设置环境变量:
"scripts": {
"dev": "NODE_ENV=development node index.js",
"build": "NODE_ENV=production webpack"
}
Windows 环境使用 set:
"scripts": {
"dev": "set NODE_ENV=development&&node index.js",
"build": "set NODE_ENV=production&&webpack"
}
六、缓存管理
# 清除 npm 缓存
npm cache clean --force
# 查看缓存大小
npm cache verify
七、包信息查询
# 查看包的详细信息
npm info 包名
# 查看包的所有版本
npm view 包名 versions
# 搜索包
npm search 关键词
八、发布包
1. 准备工作
# 注册 npm 账号(在 npmjs.com 网站)
# 登录 npm
npm login
# 查看当前登录用户
npm whoami
# 退出登录
npm logout
2. 发布包
# 发布包
npm publish
# 发布测试版本
npm publish --tag beta
# 撤销发布(24小时内)
npm unpublish 包名 --force
九、npm 版本管理
npm 使用语义化版本号(Semantic Versioning):major.minor.patch
- major: 不兼容的API更改
- minor: 向下兼容的功能性新增
- patch: 向下兼容的问题修正
版本更新命令
# 升级补丁版本 (0.0.x)
npm version patch
# 升级小版本 (0.x.0)
npm version minor
# 升级大版本 (x.0.0)
npm version major
# 升级预发布版本
npm version prerelease
十、npm 常用命令速查表
安装相关
npm install- 安装所有依赖npm install 包名- 安装指定包npm install 包名 --save-dev- 安装为开发依赖npm install 包名 -g- 全局安装
信息查询
npm list- 列出已安装的包npm info 包名- 查看包信息npm outdated- 检查过时的包
包管理
npm update- 更新包npm uninstall 包名- 卸载包npm search 关键词- 搜索包
项目管理
npm init- 初始化项目npm run 脚本名- 运行脚本npm test- 运行测试
配置相关
npm config list- 查看配置npm config set registry 地址- 设置镜像源npm cache clean --force- 清除缓存
十一、其他包管理工具对比
npm vs yarn vs pnpm
| 特性 | npm | yarn | pnpm |
|---|---|---|---|
| 速度 | 较慢 | 较快 | 最快 |
| 空间占用 | 大 | 中 | 小(共享依赖) |
| 锁文件 | package-lock.json | yarn.lock | pnpm-lock.yaml |
| 并行安装 | 支持(新版本) | 支持 | 支持 |
| 工作空间 | 支持 | 支持 | 支持 |
安装其他包管理工具
# 安装 yarn
npm install -g yarn
# 安装 pnpm
npm install -g pnpm
# 安装 cnpm
npm install -g cnpm --registry=https://registry.npmmirror.com/
十二、常见问题解决
1. 安装失败
- 检查网络连接
- 切换镜像源
- 清除缓存后重试
- 以管理员权限运行命令(Windows)
2. 版本冲突
- 使用 npm ls 检查依赖树
- 锁定依赖版本
- 使用 npx 运行特定版本的工具
3. 内存不足
# 增加 Node.js 内存限制
NODE_OPTIONS=--max-old-space-size=4096 npm install
通过这份教程,你应该能够掌握 npm 的基本使用方法,并能在实际项目中灵活运用。npm 作为前端开发的基础工具,熟练使用它将大大提高你的开发效率。