Flutter命令行工具插件pipe_cli的使用
Flutter命令行工具插件pipe_cli的使用
为什么要使用它?
Pipe的目标是帮助用户自动化日常任务并标准化代码。通过Pipe,您可以使用markdown
和yaml
创建和文档化CLI命令和代码模板。借助Pipe,您可以创建脚本以执行以下操作:
- 生成代码
- 重构代码
- 运行命令
以及其他更多功能。
动机
您是否知道一个可以处理所有需求的CLI命令?
有时我们需要非常特定的命令,或者对已知命令进行一些修改,但有时这些修改无法配置,并且没有满足期望的可用命令。
Pipe CLI 允许您使用灵活的配置编写CLI命令,使用yaml
脚本和预制命令。
特性
- 创建CLI(命令行界面)
- 创建子命令
- 为CLI添加选项
安装
dart pub global activate pipe_cli
使用方法
开始使用
- 在项目的根目录下创建一个名为
pipe.md
的文件,并用yaml编写您的CLI命令。 - 运行您的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'
该命令接收一个模式,从该模式提取两个参数feature
和name
,然后在lib/**feature**/domain/usecases/
路径下创建一个名为**name**_usecase.dart
的usecase。
execute:
- install:
- get_it
- capture:
text: '{{rest}}'
regex: '(?<feature>[A-z]*)@(?<name>[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<void> call();
}
usecase实现模板
usecase
class {{file_name|pascalCase}} extends I{{file_name|pascalCase}} {
[@override](/user/override)
Future<void> call() async {
throw UnimplementedError();
}
}
命令
capture: 使用等于命名捕获组(正则表达式)的名称创建变量,给定的regex
具有text
值匹配的结果。
```yaml
...
capture:
text: 'a CamelCase word'
regex: '(?<word_with_camelCase>^[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
更多关于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_cli
的 exampleCommand
命令,并在控制台和UI中显示结果。
注意事项
- 插件文档:务必查看
pipe_cli
插件的官方文档,以获取最新的使用指南和API参考。 - 权限:如果
pipe_cli
需要访问设备上的特定资源(如文件系统),请确保在AndroidManifest.xml
和Info.plist
中声明了必要的权限。 - 错误处理:在生产环境中,请确保添加足够的错误处理逻辑,以处理可能的命令执行失败情况。
以上就是一个基本的示例,展示了如何在Flutter项目中使用 pipe_cli
插件。如果你有更具体的需求或问题,可以查阅 pipe_cli
的官方文档或进一步提问。