# NPM 详解
## 什么是 NPM?
NPM(Node Package Manager)是 Node.js 的默认包管理工具,也是世界上最大的软件注册表。它主要用于:
- 管理项目依赖包
- 分享和发布代码
- 运行自定义脚本
## 核心功能
### 1. 包管理
**初始化项目**
```bash
npm init # 交互式创建 package.json
npm init -y # 使用默认配置快速创建
```
**安装包**
```bash
npm install # 安装所有依赖(根据 package.json)
npm install <包名> # 安装到 dependencies
npm install -D <包名> # 安装到 devDependencies
npm install -g <包名> # 全局安装
```
**更新和卸载**
```bash
npm update <包名> # 更新包
npm uninstall <包名> # 卸载包
npm outdated # 查看过期的包
```
### 2. package.json 详解
```json
{
"name": "my-project", // 项目名称
"version": "1.0.0", // 版本号(语义化版本)
"description": "项目描述",
"main": "index.js", // 入口文件
"scripts": { // 自定义脚本
"start": "node index.js",
"test": "jest",
"build": "webpack"
},
"dependencies": { // 生产环境依赖
"express": "^4.18.0"
},
"devDependencies": { // 开发环境依赖
"nodemon": "^2.0.0"
},
"keywords": [], // 关键词
"author": "作者",
"license": "MIT" // 许可证
}
```
### 3. 语义化版本
版本格式:`主版本号.次版本号.修订号`
- **^4.18.0**:兼容 4.x.x(主版本不变)
- **~4.18.0**:兼容 4.18.x(主次版本不变)
- **4.18.0**:精确版本
- **>=4.18.0**:大于等于
- **latest**:最新版本
## 常用命令分类
### 查看信息
```bash
npm -v # 查看版本
npm list # 查看已安装包
npm list --depth=0 # 仅查看顶层包
npm view <包名> version # 查看包最新版本
npm info <包名> # 查看包详细信息
```
### 配置管理
```bash
npm config set registry <url> # 设置镜像源
npm config get registry # 获取镜像源
npm config list # 列出所有配置
```
### 发布包
```bash
npm login # 登录 npm 账号
npm publish # 发布包
npm unpublish # 撤回包(72小时内)
```
### 缓存和清理
```bash
npm cache clean --force # 清理缓存
npm cache verify # 验证缓存
```
## 高级特性
### 1. npm scripts 钩子
```json
{
"scripts": {
"preinstall": "echo '安装前执行'",
"postinstall": "echo '安装后执行'",
"prebuild": "echo '构建前'",
"build": "webpack",
"postbuild": "echo '构建后'"
}
}
```
### 2. npx - 执行包
```bash
# 直接执行,无需全局安装
npx create-react-app my-app
npx prettier --write src/
npx cowsay "Hello World"
```
### 3. 工作区 (Workspaces)
```json
{
"workspaces": [
"packages/*",
"apps/*"
]
}
```
```bash
npm install -w package-a # 在特定工作区安装
npm run test --workspaces # 在所有工作区运行脚本
```
## 最佳实践
### 1. 版本锁定
- 提交 `package-lock.json` 到版本控制
- 确保团队使用相同的依赖版本
### 2. 镜像加速
```bash
# 淘宝镜像
npm config set registry https://registry.npmmirror.com
# 使用 cnpm(可选)
npm install -g cnpm --registry=https://registry.npmmirror.com
```
### 3. 安全审计
```bash
npm audit # 检查安全漏洞
npm audit fix # 自动修复
npm audit fix --force # 强制修复(可能有破坏性变更)
```
### 4. 清理和优化
```bash
# 删除 node_modules 并重新安装
rm -rf node_modules package-lock.json
npm install
# 查看依赖大小
npm install -g depcheck
depcheck
```
## 常见问题解决
### 1. 权限错误
```bash
# 修复权限(macOS/Linux)
sudo chown -R $(whoami) ~/.npm
# 或修改 npm 全局目录
npm config set prefix ~/.npm-global
```
### 2. 依赖冲突
```bash
# 使用 overrides 强制版本(npm 8.3+)
{
"overrides": {
"lodash": "4.17.21"
}
}
```
### 3. 网络问题
```bash
# 设置代理
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
# 取消代理
npm config delete proxy
npm config delete https-proxy
```
## 对比其他包管理器
| 特性 | npm | yarn | pnpm |
|------|-----|------|------|
| 速度 | 中等 | 快 | 最快 |
| 磁盘效率 | 一般 | 一般 | 高(硬链接)|
| Monorepo 支持 | 好(7.0+)| 好 | 原生支持 |
| 锁文件 | package-lock.json | yarn.lock | pnpm-lock.yaml |
## 总结
NPM 是现代 JavaScript 开发的核心工具,掌握它能够:
- ✅ 高效管理项目依赖
- ✅ 自动化构建和部署流程
- ✅ 分享和复用代码
- ✅ 确保项目的一致性和安全性
熟记常用命令,理解语义化版本,善用 npm scripts,可以显著提升开发效率。
评论 (0)
暂无评论,来发表第一条评论吧!
发表评论