assets

Asset loader for Moonbit

assets
resource
loader
file
moon add oboard/assets@0.1.1
Download zip
Author
Version
0.1.1
License
Apache-2.0
Last updated
10 months ago
Downloads
22

Dependencies

README

#oboard/assets

把目录打包成可直接在 MoonBit 程序中引用的静态常量。适合嵌入配置、文本、图片等资源,在无文件系统环境或需要单文件分发时依旧可用。

#概述

  • 扫描指定目录并生成一个 assets.mbt 文件。
  • 输出变量类型为 FileEntry,用树状结构表示目录:
    • Dir(Map[String, FileEntry])
    • File(Bytes)
  • 可选择生成 pub 变量或私有变量。

该工具的实现见项目根目录的 main.mbt,运行后会把目录结构序列化为 FileEntry 并写入到目标文件。

#快速开始

确保已安装 MoonBit 工具链并在项目根目录执行:

moon add oboard/assets moon run . -C ./.mooncakes/oboard/assets -- --dir assets --output assets.mbt --var assets --pub

参考仓库中的示例脚本:

./example.sh

默认示例会:
  • 扫描 ./assets 目录
  • 生成文件 ./assets.mbt
  • 输出变量名为 assets_1
  • 变量为 pub(可在其他模块使用)

#命令行参数

  • --dir, -d:资源目录(可选,默认 assets)。
  • --output, -o:输出文件路径(可选,默认 assets.mbt)。
  • --var, -v:生成的变量名(可选,默认 assets)。
  • --pub, -p:是否生成 pub 变量(可选,默认否)。
  • --include-entry, -i:是否包含 FileEntry 结构(可选,默认否)。

#输出示例

生成的 assets.mbt 会长这样(示例仓库中的一次运行结果):

pub let assets_1: FileEntry = Dir({ "images": Dir({"1.png": File(b"")}), "1.txt": File(b"\x74\x65\x73\x74") })

  • 1.txt 的内容是 test,以字节序列内嵌。
  • images/1.png 在示例中是空字节,只作结构展示。

#在代码中使用

  • 将生成的 assets.mbt 放在你的工程中作为普通源码文件参与编译。
  • 直接引用生成的变量名(例如 assets_1 或你指定的 --var 名)。
  • 你可以根据 FileEntry 的结构递归访问目录、读取字节等。

#注意事项

  • 输出文件会被覆盖,请谨慎设置 --output 路径。
  • 大体积二进制资源会显著增加编译产物体积,权衡使用。
  • 本工具不做压缩与去重,只做原样字节嵌入与结构序列化。

#许可

遵循仓库中的 LICENSE 文件。

#
FileEntry

pub enum FileEntry {
Dir(Map[String, FileEntry])
File(Bytes)
}

impl Show for FileEntry

#
FileEntry::extract_dir

fn FileEntry::extract_dir(self : FileEntry, prefix? : String) -> Unit raise Failure

Source Files