跳至主要内容

创建你自己的CLI

Tauri 允许你的应用通过 clap(一个强大的命令行参数解析器)拥有一个 CLI。只需在你的 `tauri.conf.json` 文件中定义一个简单的 CLI 定义,你就可以定义你的接口并在 JavaScript 和/或 Rust 中读取其参数匹配映射。

基础配置

在 `tauri.conf.json` 中,你可以使用以下结构来配置接口

src-tauri/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`,参数匹配映射将定义 `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`,参数匹配映射将定义 `type` 为 `["foo", "bar"]`。

标志参数

标志参数是一个独立的键,其存在或不存在为你的应用程序提供信息。使用以下配置

{
"args": [
{
"name": "verbose",
"short": "v",
"multipleOccurrences": true
}
]
}

用户可以运行你的应用,例如 `./app -v -v -v`,`./app --verbose --verbose --verbose` 或 `./app -vvv`,参数匹配映射将定义 `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<String, ArgData>` where `ArgData` is a struct with { value, occurrences }.
// `subcommand` is `Option<Box<SubcommandMatches>>` 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) => {
// do something with the { args, subcommand } matches
})

完整文档

你可以在这里 了解更多关于 CLI 配置的信息