制作自己的 CLI

通过强大的命令行参数解析器 clap,Tauri 可以让您的应用程序拥有 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 运行应用程序,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 定义为 trueoccurrences = 3

子命令

有些 CLI 应用程序还有额外的接口作为子命令。例如,git CLI 有 git branchgit commitgit push。你可以用subcommands数组定义额外的嵌套接口:


{
  "cli": {
    ...
    "subcommands": {
      "branch": {
        "args": []
      },
      "push": {
        "args": []
      }
    }
  }
}

其配置与根应用程序配置相同,包括 descriptionlongDescriptionargs 等。

读取匹配项

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) => {
  // 执行与 { args, subcommand } 匹配的操作
})

完整文档

有关 CLI 配置的更多信息,请点击此处