build your own pnpm 手写 pnpm

15 阅读1分钟

前言

最近在学习 pnpm 原理,但感觉看官方文档不太深入,理解的也不全面,所以打算让 AI 带着自己边写边学习,实现一个 tiny-pnpm,用最直接的方式学习技术。仓库链接在这里,欢迎围观build-your-own-pnpm

核心功能

  • 全局 store,集中存储
  • 符号链接
  • 依赖解析
  • 通过 cli 实现 add/remove/list/install 等功能

目前刚完成整个架构的搭建以及最简单的 add/remove/list 的开发,本篇先简单记录下这几个命令的原理

add

    1. 确保 store 存在
    1. 读取 package.json 文件,并解析为对象
    1. 解析安装包规格,获取包名和版本号,如果没有带版本号,通过 axios 请求 npm registry 获取最新版本号
    1. 添加到 package.json 对象内
    1. 写回 package.json 文件
    1. 自动运行 install 来安装新添加的依赖

image.png

remove

    1. 确保 store 存在
    1. 读取 package.json 文件,并解析为对象
    1. 从 package.json 对象内移除依赖
    1. 写回 package.json 文件
    1. 自动运行 install 来安装新添加的依赖

image.png

list

    • 读取 package.json 文件
    • 读取 node_modules 目录
    • 打印依赖以及对应状态,状态包括:已安装、已链接、未安装、状态未知
    • 如果指定了 --depth 参数,则打印依赖树
    • 如果指定了 --dev 参数,则打印开发依赖
    • 如果指定了 --store 参数,则使用指定的 store 目录

image.png

下一个要实现的命令是 install,这个会比较复杂,因为涉及到解析依赖、符号链接、管理 store 等行为,相信实现后能提升自己对现代包管理系统的理解。