Vex 包管理器
描述基于 manifest Wave 项目、Git·路径依赖项、lockfile、离线构建和 wavec 边界。
Wave Foundation
角色
Vex 是Wave 的包管理器和构建工具。 Vex 在 wavec 之上运行。 Vex负责项目结构和依赖分析,wavec负责编译器标志和编译管道。
Vex 命令基于manifest。 vex build、vex check 和 vex run 故意不接收 raw wavec 标志。
创建一个包
vex init
vex init --lib
应用程序使用src/main.wave,库使用src/lib.wave。包根结构如下:
my_project/
├── src/
│ └── main.wave
├── vex.ws
├── vex.lock
└── .vex/
└── deps/
vex.ws 变为 manifest。 Vex 在 .wson 扩展中不使用 manifest。
{
name = "my_project",
version = 0.1.0,
lib = false,
description = "my_project Project",
author = "unknown",
license = "Unknown",
dependencies = []
}
构建命令
vex build [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex check [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex run [--target <triple>] [--release] [--dry-run] [--locked] [--offline] [-- <args...>]
Vex 的选项保持较小。如果您需要依赖于编译器的控制,例如emit、linker、CPU、ABI或debug,请直接使用wavec。当需要使用特定编译器时,设置VEX_WAVEC=/path/to/wavec。
Resolving、Fetching、Compiling、Checking、Running、Finished等进度步骤在stderr中输出,程序输出维持在stdout。
Git 中央依赖
Vex 依赖项指定为本地 path 或 Git URL。依赖项只能使用这两种方法之一。
{
name = "app",
version = 0.1.0,
dependencies = [
{ name = "local_math", path = "../local_math" },
{ name = "remote_math", git = "https://github.com/example/math.git", tag = "v0.1.0" }
]
}
Git 依赖项最多只能指定 branch、tag 或 rev 之一。每个依赖根必须有自己的vex.ws。 Vex递归地解析依赖关系manifest,拒绝冲突的包标识,并将托管的Gitcheckout存储在.vex/deps/<name>中。
lockfile 合同
模式v2vex.lock记录了整个传递依赖图和确切的Gitcommit。使用 manifest 进行承诺。使用相同的manifest和有效的lockfile将选择相同的依赖关系图,而无需再次遵循branch或tag。
需要依赖的命令会自动解释,可以通过以下命令提前准备好。
vex fetch
vex update
vex update math shared_core
vex update 更新所有 Git 包,或仅更新指定的包和受影响的转换图。不相关的锁定包将保持commit处于选中状态。
locked 和 offline 工作流程
--locked 禁止创建和修改vex.lock。如果文件不存在、具有不受支持的架构或与manifest图不匹配,它将失败。已固定到lockfile,需要时可以导入commit。
--offline 禁止所有Git 网络操作。所需的checkout和commit应该已经存在于本地。
vex fetch --locked
vex build --locked --offline
这两个命令是严格的CI工作流程。正好在网络可用的时候准备一个锁定的commit,然后在不改变网络或lockfile的情况下编译它。 dry-run 不导入依赖项或重写lockfile。
编译器设置和信息
vex info
vex setup wavec
vex setup wavec --version <version>
vex --version
Vex 在实际构建之前验证 wavec dry-run JSON 架构。未实现所需架构的编译器将不会以未知计划执行,并会因兼容性错误而拒绝它。