args 命令行交互
args 是 Alia 的标准库命令行交互模块,提供命令行参数定义、解析、回调触发与帮助生成等功能。
引入模块
import 'args' as args ~ 导入为变量
import 'args' ~ 导入作用域
创建解析器
create
创建一个参数解析器实例,返回 ArgsParser 对象。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
named 后的参数 | String | 否 | 应用名称,用于帮助文本 |
described 后的参数 | String | 否 | 应用描述,用于帮助文本 |
const parser = args.create named 'myapp' described 'My application'
Parser 方法
addOption
添加一个带值的命令行选项(如 --name value)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 第一位置参数 | String | 是 | 标志定义,如 '-n --name',空格分隔短/长标志 |
type | String | 否 | 值类型:'String'(默认)、'Number'、'Boolean' |
default | Value | 否 | 默认值 |
required | Boolean | 否 | 是否必填,默认 false |
description | String | 否 | 选项描述,用于帮助文本 |
action | Alias | 否 | 回调,解析到该选项时触发,接收解析后的值 |
parser.addOption '-n --name' type 'String' required true description 'Your name' action (alias -> <String value> {
print 'Hello, ' .. value
})
parser.addOption '-c --count' type 'Number' default 1 description 'Repeat count'
addFlag
添加一个布尔标志(无需值,出现即为 true)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 第一位置参数 | String | 是 | 标志定义,如 '-v --verbose' |
description | String | 否 | 标志描述 |
action | Alias | 否 | 回调,解析到该标志时触发,无参数 |
parser.addFlag '-v --verbose' description 'Enable verbose mode' action (alias -> {
print 'Verbose mode enabled'
})
addArgument
添加一个位置参数定义。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 第一位置参数 | String | 是 | 参数名称 |
description | String | 否 | 参数描述 |
required | Boolean | 否 | 是否必填,默认 false |
default | Value | 否 | 默认值 |
action | Alias | 否 | 回调,解析到该参数时触发,接收解析后的值 |
parser.addArgument 'input' description 'Input file path' required true action (alias -> <String value> {
print 'Reading from ' .. value
})
parser.addArgument 'output' description 'Output file path'
parse
执行参数解析,返回解析结果对象。解析过程中按匹配顺序触发各参数的 action 回调。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 待解析参数 | String | 否 | 可逐个传入;省略时取 process.argv |
返回对象结构:
| 属性 | 类型 | 说明 |
|---|---|---|
options | Object | 选项键值对 |
arguments | Object | 位置参数键值对 |
const parsed = call parser.parse
print parsed.options.name
print parsed.arguments.input
get
从解析结果中获取指定名称的值。若未解析或名称不存在,返回 Null。
const name = parser.get 'name'
const verbose = parser.get 'verbose'
help
生成并返回格式化的帮助文本字符串。
print call parser.help
解析 规则
| 输入形式 | 说明 |
|---|---|
--long value | 长选项带值(空格分隔) |
--long=value | 长选项带值(等号分隔) |
--flag | 布尔标志,出现即为 true |
-v | 短标志 |
-vf | 短标志组合,等价于 -v -f |
-n value | 短选项带值 |
非 - 开头 | 按定义顺序匹配为位置参数 |
-- | 其后所有内容均作为位置参数 |
示例代码
import 'args' as args
const parser = args.create named 'greet' described 'A greeting CLI tool'
parser.addFlag '-v --verbose' description 'Enable verbose output' action (alias -> {
print '[verbose] Starting...'
})
parser.addOption '-n --name' type 'String' required true description 'Name to greet'
parser.addOption '-c --count' type 'Number' default 1 description 'Greeting count'
parser.addArgument 'greeting' description 'Greeting word' default 'Hello'
const parsed = call parser.parse
const name = parser.get 'name' as String
const count = parser.get 'count' as Number
const greeting = parser.get 'greeting' as String
let i = 0
while i < count {
print greeting .. ', ' .. name .. '!'
i++
}
命令行调用:
alia greet.alia -v --name Alice -c 3 Hi
~ [verbose] Starting...
~ Hi, Alice!
~ Hi, Alice!
~ Hi, Alice!