前言
最近在学习 pnpm 原理,但感觉看官方文档不太深入,理解的也不全面,所以打算让 AI 带着自己边写边学习,实现一个 tiny-pnpm,用最直接的方式学习技术。仓库链接在这里,欢迎围观build-your-own-pnpm
核心功能
- 全局 store,集中存储
- 符号链接
- 依赖解析
- 通过 cli 实现 add/remove/list/install 等功能
目前刚完成整个架构的搭建以及最简单的 add/remove/list 的开发,本篇先简单记录下这几个命令的原理
add
-
- 确保 store 存在
-
- 读取 package.json 文件,并解析为对象
-
- 解析安装包规格,获取包名和版本号,如果没有带版本号,通过 axios 请求 npm registry 获取最新版本号
-
- 添加到 package.json 对象内
-
- 写回 package.json 文件
-
- 自动运行 install 来安装新添加的依赖
remove
-
- 确保 store 存在
-
- 读取 package.json 文件,并解析为对象
-
- 从 package.json 对象内移除依赖
-
- 写回 package.json 文件
-
- 自动运行 install 来安装新添加的依赖
list
-
- 读取 package.json 文件
-
- 读取 node_modules 目录
-
- 打印依赖以及对应状态,状态包括:已安装、已链接、未安装、状态未知
-
- 如果指定了 --depth 参数,则打印依赖树
-
- 如果指定了 --dev 参数,则打印开发依赖
-
- 如果指定了 --store 参数,则使用指定的 store 目录
下一个要实现的命令是 install,这个会比较复杂,因为涉及到解析依赖、符号链接、管理 store 等行为,相信实现后能提升自己对现代包管理系统的理解。