Read a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.
let info = @moon_shadow.current()
println(info.name) // "PaiGack/moon_shadow"
println(info.version) // "0.1.1"
println(info.long_version()) // "PaiGack/moon_shadow@0.1.1"
println(info.dep("moonbitlang/moon_config")) // Some(...)
let git = @moon_shadow.git()
println(git.branch) // "main"
println(git.to_version_string()) // "main-dirty 50a396b-dirty"moon.mod ----(gen rule)---> shadow/generated.mbt --(compile)--> current()
git 命令 ----(gen rule)---> --(compile)--> git()moon add PaiGack/moon_shadowimport {
"PaiGack/moon_shadow/mooninfo",
"PaiGack/moon_shadow/gitinfo",
}
virtual(implement: "PaiGack/moon_shadow/shadow")
rule(
name: "gen",
command: "moon run --target js --target-dir _build/gen .mooncakes/PaiGack/moon_shadow/gen/main.mbt -- --meta-path PaiGack/moon_shadow/mooninfo --git-path PaiGack/moon_shadow/gitinfo \"$input\" \"$output\"",
)
dev_build(rule: "gen", input: "../moon.mod", output: "generated.mbt")import {
"PaiGack/moon_shadow",
}
options(
overrides: [ "your/module/shadow" ],
)pub fn module_info() -> @PaiGack/moon_shadow/mooninfo.ModuleInfo
pub fn git_info() -> @PaiGack/moon_shadow/gitinfo.GitInfo| 名称 | 说明 |
|---|---|
| current() | 被构建模块的 ModuleInfo |
| git() | 构建它的那次 checkout 的 GitInfo |
| ModuleInfo::dep | 按模块名查找依赖 |
| ModuleInfo::long_version | "name@version",moon add 接受的格式 |
| ModuleInfo::to_long_version_string | "name version description",用于 --version 输出 |
| GitInfo::describe_version | 分支 / tag / describe 里最具体的那个,脏时带 -dirty |
| GitInfo::commit_version | commit(可要短 hash),脏时带 -dirty |
| GitInfo::to_version_string | 上面两个拼起来;available = false 时是 "unavailable" |
| GitInfo::is_dirty | available && dirty |
| ModuleInfo 字段 | name version description license repository readme keywords preferred_target supported_targets deps |
| GitInfo 字段 | available branch tag describe commit short_commit commit_date author email dirty ahead behind |
mooninfo/ ModuleInfo / Dependency、moon_config 解析、moon.mod 侧渲染
gitinfo/ GitInfo 类型、"怎么把一段输出解释成字段"的纯逻辑
gen/ 生成器可执行文件:读 moon.mod、跑 git、写出实现文件
shadow/ 虚拟包及其生成的默认实现、gen 规则
moon_shadow.mbt 公共 API:current()、git()
moon_shadow_example/ 一个使用者模块,即上述配置的完整示例Install
Download zipRead a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.