命令行工具
Alia 的命令行工具 alia(CmdAlia)集成了项目管理、依赖安装与 Mods Space 发布功能。
项目管理
| 命令 | 说明 |
|---|---|
alia build | 编译项目到 build/<lang>/;若 @compileConfig 声明了 build Alias,则编译后解释执行之。目标语言优先级:CLI --lang:<value> > config.json 的 compiler.lang > 默认 js(两者均未声明时打印提示)。构建保留既有产物与缓存,仅覆盖编译输出 |
alia run | 编译并运行项目,目标语言解析规则同 build。若 @compileConfig 声明了 run Alias,则解释执行之;否则 js/nodejs 用 node,rs 用 cargo run |
alia clean | 清理构建产物与缓存:默认删除整个 build/;alia clean --lang:<value> 仅删除对应语言目录 |
alia create <name> | 在 ./<name>/ 创建标准 Alia 项目骨架 |
alia init [name] | 在当前目录初始化标准 Alia 项目骨架(省略 name 时取目录名) |
alia check | 静态类型检查全部 .alia 文件,存在错误时退出码为 1 |
alia format | 格式化全部 .alia 文件 |
alia start | 以解释模式执行 main.alia |
目标语言未显式声明时的提示示例:
Notice: no target language specified; using the default language 'js'.
Set "compiler": { "lang": "<language>" } in config.json, or pass an explicit target such as --lang:js, to silence this notice.
创建项目
alia create my-app # 在 ./my-app/ 创建新项目
alia init # 在当前目录初始化,项目名取目录名
alia create my-app --version:'0.2.0' --author:'alice' --description:'demo' --license:'MIT'
支持的基本参数:--version:<value>、--description:<value>、--author:<value>、--license:<value>;--force:true 允许写入非空目录。生成的项目包含 config.json、main.alia、lib.alia、mods/ 与带注释的 .gitignore(忽略 build/ 与 mods/)。
alia run / alia build 支持任意 --key:value 参数。这些参数会按名称注入到 @compileConfig 声明的 run/build Alias 中(outDir 始终自动注入,且不可被同名参数覆盖)。若 Alias 参数声明为可空类型(<Type? param>),则未提供的参数绑定为 null 而非报错。参数名对工具链不是内置的:--target、--filename 等都由各后端自行声明消费哪些名字并在覆写端解析,编译器内核不预置任何参数。
--outDir:<value> 用于直接指定产物目录(默认 <compiler.outDir>/<lang>);该参数由工具链自行消费,不会传入后端的 run/build Alias。
目标专属的行为由后端在 @compileConfig 中以数据声明,管理器只按数据执行:
~ 目标名 -> 能力表:该目标不会安装第三方运行时
targetCaps: *['web': *['noPackageManager': true]],
~ 目标名 -> 产物目录
targetOutDir: *['web': './build/nodejs-web'],
~ 目标名 -> 步骤序列:web 目标自行接管完整生命周期,跳过 build
targetSteps: *['web': ['run']],
run: alias <String outDir> <String? filename> <String? target> -> {
import 'process' as process
let entry = 'main.js'
if Ok filename { if filename != '' { entry = filename } }
process.spawn 'node' with [entry] with *[cwd: outDir, stdio: 'inherit']
}
alia run --target:'web' # 按 targetSteps 只执行 run 步骤,产物落到 targetOutDir
alia run # 未提供 target,步骤序列为默认的 build -> run
alia build --outDir:'dist' # 产物直接写入 ./dist
未提供 --target 时 targetSteps/targetCaps/targetOutDir 均不命中,按默认行为处理。
项目依赖
| 命令 | 说明 |
|---|---|
alia add <package> | 添加依赖并下载到 mods/<name>@<version>/ |
alia remove <package> | 移除依赖 |
alia update | 检查并更新全部依赖到最新版本 |
全局包
| 命令 | 说明 |
|---|---|
alia install <package> | 全局安装包到 ~/.alia/packages/ |
alia uninstall <package> | 卸载全局包 |
包名可带版本号:alia install foo@1.2.0;省略版本号时自动解析最新版本。
Mods Space
| 命令 | 说明 |
|---|---|
alia space <url> | 设置 Mods Space 地址(持久化到 ~/.alia/config.json) |
alia login | 登录(存储 token 到 ~/.alia/config.json) |
alia logout | 退出登录 |
alia publish | 发布当前项目到 Mods Space |
发布前需要 config.json 声明 name 与 version,且已执行 alia login。