Flutter代码预提交检查插件dart_pre_commit的使用

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

Flutter代码预提交检查插件 dart_pre_commit 的使用

dart_pre_commit 是一个用于在提交代码前对 Dart 项目进行格式化和静态分析的工具。它通过 Git 钩子集成到你的开发流程中,确保每次提交的代码都符合项目的代码规范。

功能特性

  • 内置多种钩子任务:如运行 dart format、检查无效导入、执行 dart analyze 等。
  • 仅处理暂存文件:自动重新暂存修改后的文件,并且如果部分暂存文件被修改,则会失败。
  • 支持二进制或库形式使用:可以作为命令行工具或库集成到现有项目中。
  • 与大多数 Git 钩子解决方案良好集成

安装

首先,在 pubspec.yaml 文件中添加 dart_pre_commit 依赖(建议作为开发依赖)并运行 dart pub getflutter pub get

dev_dependencies:
  dart_pre_commit: ^latest_version

然后执行以下命令安装依赖:

dart pub add --dev dart_pre_commit

激活

为了使用这些钩子,你需要先激活它们。以下是几种常见的激活方式。

简单的 Dart 包装器

如果你只需要这个钩子并且不需要其他复杂的设置,可以创建一个名为 tool/setup_git_hooks.dart 的文件,内容如下:

import 'dart:io';

Future<void> main() async {
  final preCommitHook = File('.git/hooks/pre-commit');
  await preCommitHook.parent.create();
  await preCommitHook.writeAsString(
    '''
#!/bin/sh
exec dart run dart_pre_commit # specify custom options here
# exec flutter pub run dart_pre_commit # Use this instead when working on a flutter project
''',
  );

  if (!Platform.isWindows) {
    final result = await Process.run('chmod', ['a+x', preCommitHook.path]);
    stdout.write(result.stdout);
    stderr.write(result.stderr);
    exitCode = result.exitCode;
  }
}

然后运行该脚本以初始化钩子:

dart run tool/setup_git_hooks.dart

使用 FVM

如果你使用 FVM,你可以调整上述脚本来通过 FVM 运行 dart_pre_commit

import 'dart:io';

Future<void> main() async {
  final useFvm = !arguments.contains('--no-fvm');
  final command = useFvm
      ? 'fvm dart run dart_pre_commit' // or "fmv flutter pub run dart_pre_commit" for flutter projects
      : 'dart run dart_pre_commit'; // or "flutter pub run dart_pre_commit" for flutter projects

  final preCommitHook = File('.git/hooks/pre-commit');
  await preCommitHook.parent.create();
  await preCommitHook.writeAsString(
    '''
#!/bin/sh
exec $command # use the previously selected command here
''',
  );

  if (!Platform.isWindows) {
    final result = await Process.run('chmod', ['a+x', preCommitHook.path]);
    stdout.write(result.stdout);
    stderr.write(result.stderr);
    exitCode = result.exitCode;
  }
}

使用 git_hooks

另一种方法是使用 git_hooks 包来激活钩子。步骤如下:

  1. git_hooks 添加为开发依赖。
  2. 按照文档说明创建必要的文件。
  3. 修改 bin/git_hooks.dart 文件,使其包含以下内容:
import "package:dart_pre_commit/dart_pre_commit.dart";
import "package:git_hooks/git_hooks.dart";

void main(List<String> arguments) {
  final params = {
    Git.preCommit: _preCommit,
  };
  GitHooks.call(arguments, params);
}

Future<bool> _preCommit() async {
  final result = await DartPreCommit.run();
  return result.isSuccess;
}

子目录中的 git_hooks 设置

如果你的项目位于仓库的子目录中,需要在 _preCommit() 函数中切换当前工作目录:

Directory.current = '/project_sub_directory'; // 替换为实际的子目录路径
final result = await DartPreCommit.run();
return result.isSuccess;

配置

dart_pre_commit 支持零配置原则,但也可以根据需要进行自定义配置。可以在 pubspec.yaml 中定义配置项:

dart_pre_commit:
  exclude: null # 特殊键
  format:
    line-length: 80
  analyze:
    error-level: info
    ignore-unstaged-files: false

每个任务都可以通过布尔值或详细配置选项来启用或禁用。例如,format 任务可以指定行长度等选项。

示例 Demo

下面是一个完整的示例项目结构和相关配置:

name: example_project
description: A new Flutter project.

publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  dart_pre_commit: ^latest_version
  git_hooks: ^latest_version

bin/git_hooks.dart 中添加:

import "package:dart_pre_commit/dart_pre_commit.dart";
import "package:git_hooks/git_hooks.dart";

void main(List<String> arguments) {
  final params = {
    Git.preCommit: _preCommit,
  };
  GitHooks.call(arguments, params);
}

Future<bool> _preCommit() async {
  Directory.current = '/example_project'; // 根据实际情况调整
  final result = await DartPreCommit.run();
  return result.isSuccess;
}

这样就完成了 dart_pre_commit 的配置和激活。现在每次提交代码时,都会自动运行相应的钩子任务,确保代码质量。


更多关于Flutter代码预提交检查插件dart_pre_commit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码预提交检查插件dart_pre_commit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中集成和使用dart_pre_commit插件进行代码预提交检查的示例。dart_pre_commit是一个用于Dart和Flutter项目的Git预提交钩子(pre-commit hook),它可以帮助你在代码提交之前自动运行一系列的检查,比如代码格式化、静态分析等。

1. 安装dart_pre_commit

首先,你需要全局安装dart_pre_commit工具。你可以通过Dart的包管理工具pub来安装它:

dart pub global activate dart_pre_commit

2. 初始化dart_pre_commit配置

进入你的Flutter项目目录,运行以下命令来初始化dart_pre_commit的配置文件:

dart_pre_commit init

这个命令会在你的项目根目录下生成一个.dart_pre_commit.yaml文件,这个文件包含了你可以自定义的检查项。

3. 配置.dart_pre_commit.yaml

编辑生成的.dart_pre_commit.yaml文件,根据你的需求添加或修改检查项。例如,你可以配置Dart格式化器和静态分析器:

hooks:
  - id: dart-format
    stages: [commit]
  - id: dart-analyze
    stages: [commit]

这个配置文件指定了在提交阶段(commit)执行Dart格式化和静态分析的检查。

4. 安装Git预提交钩子

运行以下命令来安装Git预提交钩子:

dart_pre_commit install

这个命令会在你的.git/hooks/pre-commit文件中添加一个钩子,该钩子会在每次提交之前运行dart_pre_commit配置的检查。

5. 测试预提交检查

现在,当你尝试提交代码时,Git预提交钩子会自动运行配置的检查。例如,如果你尝试提交未格式化的Dart代码,钩子会阻止提交并显示错误信息:

git add .
git commit -m "Test pre-commit hook"

如果代码未通过检查,你会看到类似下面的输出:

Running dart format...
Formatting changed 1 file.
Error: Some files were not formatted correctly. Please run `dart format .` and commit again.

6. 示例项目结构

最终,你的项目结构可能如下所示:

your_flutter_project/
├── .dart_pre_commit.yaml
├── .git/
│   └── hooks/
│       └── pre-commit
├── lib/
│   └── ... (your Flutter code)
└── pubspec.yaml

总结

通过以上步骤,你已经在Flutter项目中成功集成了dart_pre_commit插件,并配置了基本的代码预提交检查。这样可以在代码提交之前自动检查代码格式和静态分析,从而提高代码质量和一致性。

回到顶部