UNPKG

hudada-cli

Version:

专为程序员准备的本地文档搜索,快捷开发工具

110 lines (84 loc) 2.23 kB
# 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 - 及时更新有安全隐患的包 - 选择可信赖的包