锁文件
lip 使用锁文件来维护当前工作区状态。该文件会精确记录已安装的包、具体版本、所用变体,以及写入磁盘的文件。
作用
锁文件在 lip 中有几个关键用途:
- 状态追踪:作为工作区当前安装状态的唯一真实来源。
- 可复现性:记录每个包的精确版本和变体,确保工作区状态可确定、可复现。
- 卸载清理:
lip会追踪包写入的每个文件,使lip remove能干净删除相关文件,避免工作区出现“陈旧文件”。 - 依赖图:区分用户显式安装的包和作为依赖隐式安装的包,从而支持“自动移除”未使用依赖和生成依赖图等能力。
结构
锁文件是一个 JSON 文件,顶层结构如下:
json
{
"format_version": 3,
"format_uuid": "289f771f-2c9a-4d73-9f3f-8492495a924d",
"packages": [
...
]
}字段
format_version:锁文件格式版本号(当前为3)。format_uuid:用于确保文件类型正确的唯一标识。packages:WorkspaceStatePackage对象列表,表示已安装包。
包条目
packages 中每个条目代表一个已安装包,包含:
manifest:包清单(lip.json)完整内容。这样lip无需查询注册表也能获取已安装包元数据。variant:实际安装的包变体(如default、debug)。locked:布尔标记。true:用户显式安装(如lip install <package>)。false:作为其他包依赖被隐式安装。
files:属于该包的文件路径列表(相对工作区根目录)。卸载时据此删除包文件。
示例
example/cli 包的条目示例:
json
{
"manifest": {
"name": "cli",
"version": "1.0.0",
"description": "An example CLI tool",
...
},
"variant": "default",
"locked": true,
"files": [
"bin/example.exe",
"lib/example.dll"
]
}