--- title: 命令行接口 (CLI) description: 从命令行接口解析参数。 --- import PluginLinks from '@components/PluginLinks.astro'; import { Tabs, TabItem } from '@astrojs/starlight/components'; import CommandTabs from '@components/CommandTabs.astro'; Tauri 使您的应用程序能够通过 [clap](https://github.com/clap-rs/clap)(一个强大的命令行参数解析器)拥有 CLI。通过 `tauri.conf.json` 文件中的简单 CLI 定义,您可以定义接口并读取其参数匹配 JavaScript/Rust 上的映射。 ## 支持的平台 - Windows - Linux - macOS ## 设置 _这个插件要求 Rust 版本至少是 **1.75**_ 请安装 CLI 插件。 使用项目的包管理器来添加依赖。 {' '} 1. 通过将以下内容添加到 `Cargo.toml` 的文件中来安装插件。 ```toml title="src-tauri/Cargo.toml" # 如果你的目标不是移动设备,你可以在 `[dependencies]` 部分添加依赖 [target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] tauri-plugin-cli = "2.0.0-beta" # 或者使用 Git tauri-plugin-cli = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` 2. 修改 `lib.rs` 来初始化插件。 ```rust title="src-tauri/src/lib.rs" ins={4} #[cfg_attr(mobile, tauri::mobile_entry_point)] fn run() { tauri::Builder::default() .plugin(tauri_plugin_cli::init()) .run(tauri::generate_context!()) .expect("error while running tauri application"); } ``` 3. 使用你喜欢的 JavaScript 包管理器安装 JavaScript Guest 绑定。 ## 基本配置 在 `tauri.conf.json` 中,你可以使用以下结构来配置接口: ```json title="src-tauri/tauri.conf.json" { "plugins": { "cli": { "description": "Tauri CLI Plugin Example", "args": [ { "short": "v", "name": "verbose", "description": "Verbosity level" } ], "subcommands": { "run": { "description": "Run the application", "args": [ { "name": "debug", "description": "Run application in debug mode" }, { "name": "release", "description": "Run application in release mode" } ] } } } } } ``` :::note 这里所有的JSON配置都只是示例,为了清晰起见,许多其他字段都被省略了。 ::: ## 添加参数 `args` 数组表示其命令或子命令接受的参数列表。 {/* TODO: List available configuration */} ### 位置参数 位置参数由其在参数列表中的位置标识。通过以下配置: ```json title="src-tauri/tauri.conf.json" { "args": [ { "name": "source", "index": 1, "takesValue": true }, { "name": "destination", "index": 2, "takesValue": true } ] } ``` 用户可以以 `./app tauri.txt dest.txt` 的格式运行你的应用程序,参数匹配映射将把 `source` 定义为 `"tauri.txt"`,把 `destination` 定义为 `"dest.txt"`。 ### 命名参数 命名参数是一个 (key, value) 对,键标识值。通过以下配置: ```json title="tauri-src/tauri.conf.json" { "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"]`。 ### 标志参数 标志参数是一个独立的键,它的存在或不存在为应用程序提供信息。通过以下配置: ```json title="tauri-src/tauri.conf.json" { "args": [ { "name": "verbose", "short": "v" } ] } ``` 用户可以以 `./app -v -v -v`、`./app --verbose --verbose --verbose`、`./app -vvv` 的形式运行你的应用程序, 匹配的参数映射将会将 `verbose` 定义为 `true` 和 `occurrences = 3`。 ## 子命令 有些 CLI 应用程序有额外的接口作为子命令。例如,`git` CLI 有 `git branch`、`git commit` 和 `git push`。你可以使用 `subcommands` 数组定义额外的嵌套接口。 ```json title="tauri-src/tauri.conf.json" { "cli": { ... "subcommands": { "branch": { "args": [] }, "push": { "args": [] } } } } ``` 它的配置和根应用的配置一样,都有 `description`、`longDescription`、`args` 等。 ## 用法 CLI 有 JavaScript 和 Rust 两种版本。 ```js import { getMatches } from '@tauri-apps/plugin-cli'; const matches = await getMatches(); if (matches.subcommand?.name === 'run') { // `./your-app run $ARGS` was executed const args = matches.subcommand.matches.args; if (args.debug?.value === true) { // `./your-app run --debug` was executed } if (args.release?.value === true) { // `./your-app run --release` was executed } } ``` ```rust title="src-tauri/src/lib.rs" {1, 6-18} use tauri_plugin_cli::CliExt; #[cfg_attr(mobile, tauri::mobile_entry_point)] fn run() { tauri::Builder::default() .plugin(tauri_plugin_cli::init()) .setup(|app| { match app.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"); } ``` ## 权限 默认情况下,所有插件命令都被阻止,无法访问。 你必须在你的 `capabilities` 配置中定义一个权限列表。 更多信息请参见[访问控制列表](/zh-cn/reference/acl)。 ```json title="src-tauri/capabilities/main.json" ins={6} { "$schema": "./schemas/desktop-schema.json", "identifier": "main-capability", "description": "Capability for the main window", "windows": ["main"], "permissions": ["cli:default"] } ``` | 权限 | 描述 | | ----------------------- | ----------------------------------------------------- | | `cli:default` | 允许读取 CLI 匹配项。 | | `cli:allow-cli-matches` | 在没有预先配置作用域的情况下,启用 cli_matches 命令。 | | `cli:deny-cli-matches` | 拒绝没有预先配置作用域的 cli_matches 命令。 |