hudada-cli
Version:
专为程序员准备的本地文档搜索,快捷开发工具
110 lines (84 loc) • 2.23 kB
Markdown
# npm install 工作原理
## 1. 整体流程
npm install 的主要步骤:
1. **检查配置**
- 读取 npm 配置(.npmrc 文件)
- 确定 registry 源
- 检查缓存配置
2. **检查 package.json**
- 读取依赖列表
- 分析依赖版本范围
- 构建依赖树
3. **检查本地缓存**
- 位置:~/.npm/_cacache
- 包含:包的压缩文件和 metadata
- 命中缓存则直接使用
4. **下载包**
- 未命中缓存时从 registry 下载
- 校验包的完整性(shasum)
- 存入本地缓存
5. **解压安装**
- 解压到 node_modules 目录
- 执行生命周期脚本
- 生成/更新 package-lock.json
## 2. 依赖树构建
### 2.1 扁平化处理
```
项目
├── node_modules
│ ├── A@1.0.0
│ ├── B@1.0.0
│ └── C@1.0.0
```
### 2.2 依赖提升
- 将嵌套依赖提升到顶层
- 减少重复安装
- 解决依赖深度问题
### 2.3 版本冲突处理
- 遵循 semver 规则
- 使用最新兼容版本
- 必要时保留多版本
## 3. package-lock.json 的作用
1. **锁定依赖版本**
- 确保团队使用相同版本
- 包含完整依赖树信息
- 记录包的 integrity 值
2. **加速安装**
- 跳过依赖分析
- 直接使用锁定的版本
- 提高安装效率
## 4. 缓存机制
1. **内容寻址存储**
- 基于包内容的哈希值
- 避免重复存储
- 保证内容完整性
2. **缓存策略**
- 优先使用缓存
- 定期清理过期缓存
- 支持离线安装
## 5. 常见问题处理
1. **版本冲突**
- 检查 package.json
- 使用 npm ls 查看依赖树
- 手动解决版本不兼容
2. **依赖缺失**
- 检查 registry 配置
- 验证包名是否正确
- 确认网络连接
3. **权限问题**
- 检查目录权限
- 使用 sudo 或管理员权限
- 修改 npm 默认目录
## 6. 最佳实践
1. **版本控制**
- 使用语义化版本
- 锁定关键依赖版本
- 定期更新依赖
2. **依赖管理**
- 及时清理未使用的依赖
- 避免过度依赖
- 注意依赖的大小
3. **安全性**
- 使用 npm audit
- 及时更新有安全隐患的包
- 选择可信赖的包