Read a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.
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 native --target-dir _build/gen .mooncakes/PaiGack/moon_shadow/gen -- \"$input\" \"$output\"",
)
dev_build(rule: "gen", input: "../moon.mod", output: "generated.mbt")import {
"PaiGack/moon_shadow",
}
options(
overrides: [ "your/module/shadow" ],
)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"mooninfo/ ModuleInfo / Dependency、moon_config 解析、moon.mod 侧渲染
gitinfo/ GitInfo 类型,以及真正读 .git 的那一层:
仓库发现、refs、inflate、commit 对象、index、sha-1
gen/ 生成器可执行文件:读 moon.mod,调 gitinfo,写出实现文件
shadow/ 虚拟包及其生成的默认实现、gen 规则
moon_shadow.mbt 公共 API:current()、git()
moon_shadow_example/ 一个使用者模块,即上述配置的完整示例pub fn module_info() -> @PaiGack/moon_shadow/mooninfo.ModuleInfo
pub fn git_info() -> @PaiGack/moon_shadow/gitinfo.GitInfoInstall
Download zipRead a MoonBit module's own moon.mod and git metadata at runtime, baked in at build time.