XU XUv0.8.8
EN

文档

模块与依赖

目录项目使用 xu.xun。module: 是模块身份,version: 是模块自身版本,xu: 是所用 Xu 版本。外部导入必须明确别名,并在 require: 中声明所属根模块。

本机开发

让 app 与 packages 目录同级,在 app/xu.xun 中写:

module: app
version: !ver 0.1.0
xu: !ver 0.8.8
require:
  "github.com/xulang-org/packages": file:../packages
@main
mysql #github.com/xulang-org/packages/mysql

fn main() {
    _ := mysql.driver()
}

file: 相对于声明它的清单。require 写根模块,导入再选择 mysql、postgres 等子包;XUPATH 和 #mysql 短路径不能替代这份声明。

远程模块与版本选择

可选择审查过的不可变 Git 提交;来源中已有对应版本标签时,也可声明精确 SemVer 最低要求:

require:
  "github.com/xulang-org/packages": git:https://github.com/xulang-org/packages.git@<commit>

# Alternative, when this version is available:
require:
  "github.com/xulang-org/packages": v0.1.1

以上 require 块二选一,<commit> 须换成真实提交。MVS 读取全部可达版本的清单,为每个模块选择图中最高的最低要求,不查询 latest,也不接受版本范围。v2 及以上模块使用匹配的 /vN 路径后缀。显式 file/Git/tar 来源继续支持,来源冲突会报错。

安装、锁定与离线构建

xu install app
xu check app/main.xu --offline
xu build app/main.xu --frozen --output app/program
模式行为
默认允许下载并建立锁条目;已锁定内容不匹配时失败。
--offline不下载,只使用本地来源、已校验缓存或 vendor;仍可建立锁条目。
--frozen隐含离线,要求已有匹配锁条目,不写依赖缓存或补锁;本地 file 依赖须先安装为 vendor 快照。

审查并提交 xu.lock。显式来源使用 v2 锁,版本图使用 v3 锁。xu install 在 vendor 中保留全部可达版本快照,支持离线重放 MVS 图。冻结依赖不冻结主项目源码或编译产物。install --frozen、build --desktop 搭配这两种模式会被拒绝。

代理与私有模块

XUPROXY='https://proxy.example.com,direct' xu install app
XUPRIVATE='example.com/private/*' xu install app

XUPROXY 支持 HTTP(S)、绝对 file://、direct 与 off,默认 direct。逗号仅在 404/410 后回退;竖线允许请求错误后回退。身份或完整性不匹配始终失败。直接版本发现支持 GitHub 仓库,其他主机使用显式来源或配置的 Xu 代理。

XUPRIVATE 是逗号分隔的模块前缀 glob 列表;XUNOPROXY 默认沿用它并控制代理绕过。不假定公共 Xu 代理已上线,Go 模块代理中的清单不能作为 Xu 清单。

0.8.4 独立校验

XUSUMDB 接受可信 Ed25519 verifier 公钥及可选服务 URL。对 SemVer 模块,客户端验证签名树头、模块摘要、包含证明和日志追加一致性后才接受依赖;未设置或设为 off 时仍是首次使用信任。XUNOSUMDB 独立控制校验绕过,默认沿用 XUPRIVATE。

配置校验后,认证失败不会退回首次使用信任;离线与冻结构建要求已有已验证证明。公共 Xu 校验服务和跨客户端独立见证仍待发布,需要自行配置可信服务与公钥。

旧版本迁移

旧点式包路径改为斜杠路径,保留域名、版本号和字段/方法访问中的点。模块身份或旧锁格式发生变化时,审查后重新安装。不能为跳过内容不匹配而直接删除当前锁文件。

使用扩展包