制作自己的 CLI
通过强大的命令行参数解析器 clap,Tauri 可以让您的应用程序拥有 CLI。只需在 tauri.conf.json
文件中定义一个简单的 CLI,您就可以定义您的界面,并读取其参数匹配映射(JavaScript 和/或 Rust)。
基础配置
在 tauri.conf.json
下,有以下结构用于配置接口:
{
"tauri": {
"cli": {
"description": "", // command description that's shown on help
"longDescription": "", // command long description that's shown on help
"beforeHelp": "", // content to show before the help text
"afterHelp": "", // content to show after the help text
"args": [], // list of arguments of the command, we'll explain it later
"subcommands": {
"subcommand-name": {
// configures a subcommand that is accessible
// with `./app subcommand-name --arg1 --arg2 --etc`
// configuration as above, with "description", "args", etc.
}
}
}
}
}
此处的所有 JSON 配置均为示例,为清晰起见,省略了许多其他字段。
添加参数
args
数组表示命令或子命令接受的参数列表。有关配置方法的更多详情,请点击此处。
位置参数
位置参数通过其在参数列表中的位置来标识。配置如下
{
"args": [
{
"name": "source",
"index": 1,
"takesValue": true
},
{
"name": "destination",
"index": 2,
"takesValue": true
}
]
}
用户可以使用 ./app tauri.txt dest.txt
运行应用程序,arg 匹配映射会将source
定义为 "tauri.txt"
,destination
定义为 "dest.txt"
。
命名参数
命名参数是一个(键、值)对,其中键表示值。配置如下
{
"args": [
{
"name": "type",
"short": "t",
"takesValue": true,
"multiple": true,
"possibleValues": ["foo", "bar"]
}
]
}
用户可以使用 ./app --type foo bar
、./app -t foo -t bar
或 ./app --type=foo,bar
运行应用程序,arg 匹配映射会将type
定义为 ["foo", "bar"]
。
标志参数
标志参数是一个独立的键,其存在与否可为应用程序提供信息。配置如下
{
"args": [
{
"name": "verbose",
"short": "v",
"multipleOccurrences": true
}
]
}
用户可以使用 ./app -v -v -v
、./app --verbose --verbose --verbose
或 ./app -vvv
运行应用程序,arg 匹配映射会将 verbose
定义为 true
,occurrences = 3
。
子命令
有些 CLI 应用程序还有额外的接口作为子命令。例如,git
CLI 有 git branch
、git commit
和 git push
。你可以用subcommands
数组定义额外的嵌套接口:
{
"cli": {
...
"subcommands": {
"branch": {
"args": []
},
"push": {
"args": []
}
}
}
}
其配置与根应用程序配置相同,包括 description
、longDescription
、args
等。
读取匹配项
Rust
fn main() {
tauri::Builder::default()
.setup(|app| {
match app.get_cli_matches() {
// `matches` here is a Struct with { args, subcommand }.
// `args` is `HashMap` where `ArgData` is a struct with { value, occurrences }.
// `subcommand` is `Option>` where `SubcommandMatches` is a struct with { name, matches }.
Ok(matches) => {
println!("{:?}", matches)
}
Err(_) => {}
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
JavaScript
import { getMatches } from '@tauri-apps/api/cli'
getMatches().then((matches) => {
// 执行与 { args, subcommand } 匹配的操作
})
完整文档
有关 CLI 配置的更多信息,请点击此处。