跳到主要内容

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',空格分隔短/长标志
typeString否值类型:'String'(默认)、'Number'、'Boolean'
defaultValue否默认值
requiredBoolean否是否必填,默认 false
descriptionString否选项描述,用于帮助文本
actionAlias否回调,解析到该选项时触发,接收解析后的值
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'
descriptionString否标志描述
actionAlias否回调,解析到该标志时触发,无参数
parser.addFlag '-v --verbose' description 'Enable verbose mode' action (alias -> {
print 'Verbose mode enabled'
})

addArgument​

添加一个位置参数定义。

参数类型必填说明
第一位置参数String是参数名称
descriptionString否参数描述
requiredBoolean否是否必填,默认 false
defaultValue否默认值
actionAlias否回调,解析到该参数时触发,接收解析后的值
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

返回对象结构:

属性类型说明
optionsObject选项键值对
argumentsObject位置参数键值对
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!

下一步​