← 中文资源

简体中文版本

构建带语义版本解析的迷你包管理器

教学向包管理器:semver 范围解析为确定性锁文件、本地注册表取包、SHA-256 完整性校验后落盘安装。

阅读英文原文

目标

构建读取带 semver 范围的清单、确定性地解析全量传递依赖图、写出钉死精确版本的锁文件、从本地文件注册表拉取经 SHA-256 校验的 tarball 并物化 node_modules 树的迷你包管理器。

要点

解析分两相:先收集全图对每个包的约束再选交集内最高版本——冲突时能同时报出两条请求链;锁文件按名排序、字节稳定,两次解析逐字节一致(插入序泄漏是经典 bug,专门测试抓);安装器只读锁文件不读清单,同锁文件必同字节树;每个 tarball 先哈希比对再解压,中毒缓存绕不过注册表校验。

提示

无预发布组件的比较器必须拒绝 prerelease 版本,除非范围本身带同一预发布标签。

验证

删树后仅凭锁文件重装并逐字节比对两棵树;篡改注册表一个字节断言在解压前点名失败。 项目目录骨架:

mini-pkg/
├── bin/mini-pkg.js
├── src/
│   ├── semver.js
│   ├── resolver.js
│   ├── lockfile.js
│   ├── fetcher.js
│   └── installer.js
├── registry/
│   └── index.json
├── test/
│   ├── semver.test.js
│   └── resolver.test.js
└── package.json

实施阶段:Semver engine → Deterministic resolver → Lockfile and integrity → Install layout。