使用 husky 管理 Flutter 和 Dart 项目的 git 钩子

756 阅读2分钟

前言

FlutterDart 的命令行工具都提供了一些便捷操作的命令,如 flutter analyzedart analyze 用于分析代码,flutter formatdart format 用于格式化代码,flutter testdart test 可以跑测试代码

在团队协作中,会有一些约定好的代码规范,如何保证每个开发者所提交代码时都能够满足规范的要求?常用的办法就是使用 Git 钩子。但由于 Git 钩子默认存在于项目的 .git/hooks 目录下,不会进入代码库中,那么需要解决的问题就是如何在团队协作中共享 Git 钩子。

关于 Git 钩子,见 自定义 Git - Git 钩子

在 JavaScript 社区中有一个广泛使用的的 npm 包 husky,用来管理 JS 项目的 Git 钩子。但对于 Flutter 和 Dart 项目而言,如果直接使用 npm 包 husky,则需要每个写作者都在本地配有 Node 环境,显然很不方便。

好在 pub.dev (Flutter 和 Dart 的包管理平台)已经有了 Dart 语言版本的 husky,下面来简单介绍下如何使用 husky.

使用

添加依赖

首先,将 husky 添加为项目的开发依赖,即在项目的 pubsepc.yaml 中的 dev_dependencies 下添加 husky

dev_dependencies:  
  husky: latest # 替换为符合当前使用的 Dart SDK 版本要求的版本号,最新版本是 0.1.6

也可以直接通过 flutter pub add --dev huskydart pub add --dev husky 来添加

安装

然后,运行 husky install 命令在当前项目目录下安装和配置 husky

flutter pub run husky instlal # 或者 dart run husky install

这会在当前项目目录下生成 .husky/ 目录,需要将此目录提交到 Git 仓库中。

添加钩子

接着,添加一个 Git 钩子。通常添加可以阻断 commit 的钩子 pre-commit

flutter pub run husky add .husky/pre-commit 'flutter analyze'

这会在 .husky/ 目录下生成一个 pre-commit 钩子文件,其内容如下:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

flutter analyze
测试钩子

添加一次提交:

git add .husky
git commit -m 'Add husky to manage git hooks'

这时可以看到会运行 flutter analyze,如果想在每次提交时做更多的检查工作,只需要编辑 .husky/pre-commit 文件内容即可。

共享

对于写作者,在拉取到新的代码后,只需要在本地执行 flutter pub run husky install 即可在其本地配置好 Git 钩子.