目标
构建读取带 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。