Appearance
📦 package.json 配置
📝 name: 包名,必须是英文字符
🔢 version: 版本号管理
📊 版本规范:
主版本号.次版本号.补丁版本号
- 🚀 主版本号: 重大更新
- 新功能发布
- API 重大变更
- 架构重大调整
- 🔨 次版本号: 功能迭代
- 新增小功能
- 扩展现有 API
- 🐛 补丁版本号: 问题修复
- Bug 修复
- 性能优化
- 安全补丁
- 🚀 主版本号: 重大更新
📝 语义化版本规则
1.0.0
→ 锁定具体版本>=1.0.0
→ 大于等于指定版本1.0.0 - 2.0.0
→ 版本范围限定1.2.x
→ 主版本 1,次版本 2,补丁版本任意~1.2.3
→ 允许补丁版本更新 (≥1.2.3, <1.3.0)^1.2.3
→ 允许次版本和补丁版本更新 (≥1.2.3, <2.0.0)*
→ 使用最新发布版本
📋 desc: 包的描述
🏠 homePage: 官网地址
👤 author: 包的作者(错误信息将导致发布失败)
📂 repository: 代码仓库地址
{type: 'git', url: ''}
⚡ main: 包的入口文件
🏷️ keywords: 搜索关键字
📦 dependencies: 生产环境依赖
🛠️ devDependencies: 开发环境依赖
📥 包的安装与使用
🛠️ 安装依赖
生产环境依赖 📦
npm i x
npm i --save x
npm i -S x
开发环境依赖 🔧
npm i -D x
npm i --save-dev x
📚 包的使用规则
模块查找机制 🔍
- 引入模块时,如果路径不以
/
或./
开头:- 🔎 默认从
node_modules
目录查找对应包 - 📂 如当前目录未找到,将逐级向上查找
- ❌ 始终未找到则抛出错误
- 🔎 默认从
入口文件确定 📄
- 📋 优先查找
package.json
中的main
字段指定的文件 - 📎 若无
main
字段,则默认使用index.js
作为入口文件
🚨 npm 历史遗留问题
1. 📦 依赖嵌套困境
- 🌲 目录结构层次过深,形成"依赖地狱"
- 📏 文件系统路径长度受限,特别是在 Windows 系统
- 🔄 模块重复安装,造成资源浪费
2. ⚡ 性能瓶颈
- 🐢 串行下载机制导致安装速度慢
- 💾 重复包下载占用大量磁盘空间
- ⏳ 安装时间随依赖增加呈线性增长
3. 🔍 调试体验不佳
- 📝 控制台输出信息冗长混乱
- ❌ 错误提示模糊不清
- 🔎 问题排查耗时费力
4. 📊 版本管理挑战
- ⚠️ 依赖版本不一致引发的兼容性问题
- 🔒 版本锁定机制存在缺陷
- 🔄 项目迁移时可能出现环境差异
🎉 重大进展: npm6+ 版本已针对性解决了上述问题,带来显著改善。
🧶 Yarn - 现代化的包管理工具
Yarn 作为 npm 的替代方案,拥有如下特性:
✨ 核心特点
- 🏗️ 扁平化依赖树 - 智能优化模块结构,消除冗余
- ⚡ 并行下载机制 - 多线程并发下载,速度提升显著
- 💾 本地缓存系统 - 支持离线安装,重装速度飞快
- 📊 简洁日志输出 - 信息展示清晰直观
- 🔒 yarn.lock 锁文件 - 确保依赖版本完全一致
📦 pnpm - 高性能的包管理器
🌟 核心优势
📁 优雅的模块结构
- 🔧
.bin
- 执行文件集中管理 - 📂
.pnpm
- 依赖高效存储 - 📚 层级结构清晰明了
- 🔧
🛡️ 可靠的依赖管理
- 🚫 严格防止使用未声明依赖
- ✅ 保证依赖关系准确无误
💎 极致的空间优化
- 🗄️ 全局依赖共享机制
- 🔄 智能复用避免重复
⚡ 创新特性
🚀 高效文件系统
- 🔗 巧妙运用符号链接与硬链接
- ⚡ 大幅减少文件复制开销
- 🎯 安装卸载速度极快
🌳 完美依赖树
- 🔗 创新解决路径长度限制
- 📊 科学的树形结构设计
- 🛡️ 严格的依赖管理机制
🔧 pnpm 工作原理
📄 文件系统基础
文件本质是指针,指向外部存储空间(如硬盘、U 盘等存储介质)的地址
📝 文件复制机制
复制操作会创建新的文件指针,并复制原内容到新的存储位置
🔗 硬链接(Hard Link)
- Unix 系统核心概念
- 复制文件指针到新位置
- 仅支持文件,不支持目录
🔗 符号链接(Symbolic Link)
- 支持文件和目录的链接
- 创建指向原始文件/目录的引用
- 类似快捷方式机制
🔄 链接类型对比
- 📌 硬链接仅支持文件,符号链接可用于目录
- 🔗 硬链接与源文件独立,符号链接保持关联