Flutter命令行工具插件pipe_cli的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter命令行工具插件pipe_cli的使用

为什么要使用它?

Pipe的目标是帮助用户自动化日常任务并标准化代码。通过Pipe,您可以使用markdownyaml创建和文档化CLI命令和代码模板。借助Pipe,您可以创建脚本以执行以下操作:

  • 生成代码
  • 重构代码
  • 运行命令

以及其他更多功能。

动机

您是否知道一个可以处理所有需求的CLI命令?

有时我们需要非常特定的命令,或者对已知命令进行一些修改,但有时这些修改无法配置,并且没有满足期望的可用命令。

Pipe CLI 允许您使用灵活的配置编写CLI命令,使用yaml脚本和预制命令。

特性

  • 创建CLI(命令行界面)
  • 创建子命令
  • 为CLI添加选项

安装

dart pub global activate pipe_cli

使用方法

开始使用

  1. 在项目的根目录下创建一个名为pipe.md的文件,并用yaml编写您的CLI命令。
  2. 运行您的CLI命令:
    pipe <your_created_cli>
    

创建CLI(命令行界面)

要创建一个新的CLI命令,只需在pipe.md文件中添加您的脚本。

**`example.yaml`**

```yaml
say_hello:
 name: 'hello'            # 命令名称,用于终端调用
 abbr: 'h'                # 命令缩写,作为名称的别名
 description: 'Say hello'  # 命令描述
 execute:
  - print: 'Hello World'   # 一个名为“print”的预制命令,将在终端显示“Hello World”

要使用该命令,只需运行:

```bash
pipe say hello

创建子命令

要创建子命令,首先编写您的命令,并添加一个名为sub-commands的列表,其中包含将作为子命令工作的CLI名称。子命令名称必须由命令名称和名称通过点分隔组成。

**`example.yaml`**

```yaml
say:
  name: 'say'            # 命令名称,用于终端调用
  abbr: 's'              # 命令缩写,作为名称的别名
  description: 'Say something'  # 命令描述
  sub_commands:
    - say.hello
say.hello:
  name: 'hello'
  abbr: 'h'
  description: 'Say hello'
  execute:
    - print: 'Hello World'   # 一个名为“print”的预制命令,将在终端显示“Hello World”

要使用该命令,只需运行:

```bash
pipe say hello

为CLI添加选项

要为CLI添加选项,首先编写您的命令,并添加一个名为args的列表,其中包含CLI选项的定义。子命令名称必须由命令名称和名称通过点分隔组成。

**`example.yaml`**

```yaml
say:
  name: 'say'              # 命令名称,用于终端调用
  abbr: 's'                # 命令缩写,作为名称的别名
  description: 'Say something'  # 命令描述
  sub_commands:
    - say.hello
say.hello:
  name: 'hello'
  abbr: 'h'
  description: 'Say hello'
  args:
    world:
      help: "appends a word 'World' to phrase"   # 显示的帮助文本,当使用--help标志时
      abbr: w                                    # 该标志的别名(使用-w)
      negatable: true                            # 创建选项--no-world,将world设置为false
      defaults: true                             # 设置默认值为true
  execute:
    if_flag:
      flag: world
      then:
        - print: 'Hello World'    # 一个名为“print”的预制命令,将在终端显示“Hello World”
      else:
        - print: 'Hello'          # 一个名为“print”的预制命令,将在终端显示“Hello”

要使用该命令,只需运行:

```bash
pipe say hello --world

pipe say hello -w

管道文件(pipe.md

创建一个名为pipe.md的markdown文件,然后编写您的第一个命令。

**`name_of_script`**

```yaml
gen_usecase:
 name: usecase
 abbr: u
 description: 'Creates an usecase in a custom template'

该命令接收一个模式,从该模式提取两个参数featurename,然后在lib/**feature**/domain/usecases/路径下创建一个名为**name**_usecase.dart的usecase。

 execute:
  - install:
    - get_it
  - capture:
     text: '{{rest}}'
     regex: '(?&lt;feature&gt;[A-z]*)@(?&lt;name&gt;[A-z]*)'
  - file_name: '{{name}}_usecase'
  - file_path: 'lib/features/{{feature}}/domain/usecase/{{file_name}}.dart'
  - build_usecase: '{{interface_usecase}}{{\n}}{{usecase}}'
  - generate:
     template: '{{build_usecase}}'
     path: '{{file_path}}'

模板

创建一个新行 \n


usecase接口模板 interface_usecase

abstract class I{{file_name|pascalCase}} {
  Future&lt;void&gt; call();
}

usecase实现模板 usecase

class {{file_name|pascalCase}} extends I{{file_name|pascalCase}} {
  [@override](/user/override)
  Future&lt;void&gt; call() async {
    throw UnimplementedError();
  }
}

命令

capture: 使用等于命名捕获组(正则表达式)的名称创建变量,给定的regex具有text值匹配的结果。

```yaml
...
capture:
 text: 'a CamelCase word'
 regex: '(?&lt;word_with_camelCase&gt;^[a-z]|[A-Z0-9])[a-z]*'

**generate**: 使用`template`内容创建一个文件`path`。

```yaml
```yaml
...
generate:
 template: '{{build_usecase}}'
 path: '{{file_path}}'

**print**: 打印给定的值。

```yaml
```yaml
...
print: 'Hello World'

**run**: 在终端运行一个命令。

```yaml
```yaml
...
run:
  executable: 'dart'
  args:
    - pub
    - add
    - dio
  show_outputs: true      # 默认为true - 显示给定命令(dart)的输出
  provide_feedback: true  # 默认为true - 提供成功或错误的反馈

### 变量

使用一个值为`String`、`num`或`bool`的yaml对象声明变量,变量名称不能与对象名称匹配。

```yaml
```yaml
...
name: 'André'
hello_world: 'Hello {{André}}'
print: hello_world

### 模板

Dart代码保存为模板,并可以通过评估语法`{{template_name}}`作为参数使用,传递模板名称,即模板名称前的Dart块内容。

```yaml
```yaml
generate_class:
  name: generate_class
  abbr: g
  description: Creates a Class.
  execute:
    - class_name: 'some_class'
    - generate:
        template: '{{use_case.dart}}'
        path: 'lib/classes/{{class_name}}.dart'

class_template

class {{class_name|pascalCase}}{}

更多关于Flutter命令行工具插件pipe_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter命令行工具插件pipe_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用命令行工具插件 pipe_cli 的示例代码和步骤。假设你已经有一个Flutter项目,并且你希望集成并使用 pipe_cli

第一步:添加依赖

首先,你需要在你的Flutter项目的 pubspec.yaml 文件中添加 pipe_cli 插件的依赖。如果你还没有这个插件,可以通过以下方式添加:

dependencies:
  flutter:
    sdk: flutter
  pipe_cli: ^最新版本号  # 请将最新版本号替换为实际的最新版本

运行 flutter pub get 来获取依赖。

第二步:配置原生平台(iOS 和 Android)

虽然 pipe_cli 是一个命令行工具插件,但在某些情况下,你可能需要为原生平台进行一些配置。由于 pipe_cli 主要是命令行工具,通常不需要复杂的原生配置,但你可以查看插件的官方文档以确保是否需要。

第三步:编写命令行调用代码

接下来,我们编写Flutter代码来调用 pipe_cli 插件的功能。假设 pipe_cli 提供了一个简单的命令 exampleCommand,你可以按照以下方式调用它:

import 'package:flutter/material.dart';
import 'package:pipe_cli/pipe_cli.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Pipe CLI Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                // 调用 pipe_cli 的 exampleCommand 命令
                String result = await PipeCli.runCommand('exampleCommand');
                print('Command output: $result');
                
                // 显示结果到 UI(如果需要)
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Command output: $result')),
                );
              } catch (e) {
                print('Error running command: $e');
                
                // 显示错误信息到 UI(如果需要)
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Error: ${e.toString()}')),
                );
              }
            },
            child: Text('Run Example Command'),
          ),
        ),
      ),
    );
  }
}

第四步:运行应用

确保你的开发环境已经配置好,然后运行你的Flutter应用:

flutter run

在应用的UI中,你应该会看到一个按钮,点击按钮将调用 pipe_cliexampleCommand 命令,并在控制台和UI中显示结果。

注意事项

  1. 插件文档:务必查看 pipe_cli 插件的官方文档,以获取最新的使用指南和API参考。
  2. 权限:如果 pipe_cli 需要访问设备上的特定资源(如文件系统),请确保在 AndroidManifest.xmlInfo.plist 中声明了必要的权限。
  3. 错误处理:在生产环境中,请确保添加足够的错误处理逻辑,以处理可能的命令执行失败情况。

以上就是一个基本的示例,展示了如何在Flutter项目中使用 pipe_cli 插件。如果你有更具体的需求或问题,可以查阅 pipe_cli 的官方文档或进一步提问。

回到顶部