包配置#

moon 使用 moon.pkg.json 文件来标识和描述一个包。访问 moon 的仓库 查看完整的 JSON 模式。

名称#

包名称不可配置;它由包的文件夹目录名称确定。

is-main#

is-main 字段用于指定包是否需要链接为一个可执行文件。

链接过程的输出取决于后端。当此字段设置为 true 时:

  • 对于 Wasm 和 wasm-gc 后端,将生成一个独立的 WebAssembly 模块。

  • 对于 js 后端,将生成一个独立的 JavaScript 文件。

导入依赖#

导入#

import 字段用于指定包依赖的其他包。

例如,以下导入了 moonbitlang/quickcheckmoonbitlang/x/encoding,将后者别名为 lib 并从后者导入函数 encode。用户可以使用 @lib.encode 代替 encode

{
  "import": [
    "moonbitlang/quickcheck",
    { "path" : "moonbitlang/x/encoding", "alias": "lib", "value": ["encode"] }
  ]
}

测试导入#

test-import 字段用于指定此包的黑盒测试包依赖的其他包,配置语法与 import 相同

test-import 字段用于指定是否导入被测试包的公共定义(默认为 true)。

白盒测试导入#

wbtest-import 字段用于指定此包的白盒测试包依赖的其他包,配置语法与 import 相同。

条件编译#

条件编译的最小单元是一个文件。

在条件编译表达式中,支持三种逻辑运算符:andornot,其中 or 运算符可以省略。

例如,["or", "wasm", "wasm-gc"] 可以简化为 ["wasm", "wasm-gc"]

表达式中的条件可以被归类为后端和优化层次:

  • 后端条件"wasm""wasm-gc""js"

  • 优化层次条件"debug""release"

条件表达式支持嵌套。

如果文件未列在 "targets" 中,它将默认在所有条件下编译。

例如:

{
  "targets": {
    "only_js.mbt": ["js"],
    "only_wasm.mbt": ["wasm"],
    "only_wasm_gc.mbt": ["wasm-gc"],
    "all_wasm.mbt": ["wasm", "wasm-gc"],
    "not_js.mbt": ["not", "js"],
    "only_debug.mbt": ["debug"],
    "js_and_release.mbt": ["and", ["js"], ["release"]],
    "js_only_test.mbt": ["js"],
    "js_or_wasm.mbt": ["js", "wasm"],
    "wasm_release_or_js_debug.mbt": ["or", ["and", "wasm", "release"], ["and", "js", "debug"]]
  }
}

预构建#

pre-build 字段用于指定预构建命令,这些命令将在构建命令(如 moon check|build|test)之前执行。

"pre-build" 是一个数组,其中每个元素是一个包含 inputoutputcommand 字段的对象。inputoutput 字段可以是字符串或字符串数组,而 command 字段是一个字符串。在 command 中,可以使用任何 shell 命令,以及分别表示输入和输出文件的 $input$output 变量。如果这些字段是数组,它们将默认使用空格连接。

目前,内置了一个特殊命令 :embed,它将文件转换为 MoonBit 源代码。--text 参数用于嵌入文本文件,--binary 用于二进制文件。--text 是默认值,可以省略。--name 参数用于指定生成的变量名,默认为 resource。该命令在 moon.pkg.json 文件所在的目录中执行。

{
  "pre-build": [
    {
      "input": "a.txt",
      "output": "a.mbt",
      "command": ":embed -i $input -o $output"
    }
  ]
}

如果当前包目录中 a.txt 的内容为:

hello,
world

那么在 moon.pkg.json 所在目录中运行 moon build 后,将生成以下 a.mbt 文件:

let resource : String =
  #|hello,
  #|world
  #|

警告列表#

这用于禁用特定的预设编译器警告编号。

例如,在以下配置中,-2 禁用警告编号 2(未使用的变量)。

{
  "warn-list": "-2",
}

你可以使用 moonc build-package -warn-help 来查看预设编译器警告编号列表。

$ moonc -v                      
v0.1.20240914+b541585d3

$ moonc build-package -warn-help
Available warnings: 
  1 Unused function.
  2 Unused variable.
  3 Unused type declaration.
  4 Redundant case in a pattern matching (unused match case).
  5 Unused function argument.
  6 Unused constructor.
  7 Unused module declaration.
  8 Unused struct field.
 10 Unused generic type variable.
 11 Partial pattern matching.
 12 Unreachable code.
 13 Unresolved type variable.
 14 Lowercase type name.
 15 Unused mutability.
 16 Parser inconsistency.
 18 Useless loop expression.
 19 Top-level declaration is not left aligned.
 20 Invalid pragma
 21 Some arguments of constructor are omitted in pattern.
 22 Ambiguous block.
 23 Useless try expression.
 24 Useless error type.
 26 Useless catch all.
  A all warnings

警示列表#

禁用用户预设警示。

{
  "alert-list": "-alert_1-alert_2"
}