- 主要观点:此文讨论依赖管理工具(如 Yarn)用于缓存非确定性进程结果的文件,重点并非作为防止并发访问的哨兵文件。强调避免锁文件,介绍使锁文件不必要的设计原则。
关键信息:
- 锁文件是减少使用脆弱、缓慢和不安全的遗留工具的权宜之计,会使开发过程复杂,需要额外手动干预,其存在是设计不佳的症状。
- 设计原则包括可重现输入(用哈希引用外部事物等)、确定性(依赖求解器应确定性运行)。
- 2024 - 12 - 26 有相关评论及 FAQ,包括以前情况更糟但应向前发展(如 Nix 无需锁文件)、手写哈希文件与自动生成锁文件的区别、版本号等相关讨论不相关、此原则不强制中心化及适用于各种机制等。
重要细节:
- 可重现输入可避免供应链攻击向量,允许缓存等,Git 是常见方式,其他 Merkle - trees 等可能更适合分发。
- 确定性要求依赖求解器运行相同数据产生相同输出,理想情况下对“无关”差异有鲁棒性,随机算法可用伪随机并以输入哈希和计数器初始化。
- 对于锁文件的误解,如手写哈希文件与自动生成锁文件的不同,此原则不限制特定的依赖指定方式,只要能确定性计算所需文件集即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。