最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 使用git_hooks库助力Flutter团队编码规范

    正文概述 掘金(JSShou)   2021-03-16   369

    原文链接

    前言

    随着Flutter 2.0的发布,越来越多的公司和个人都在尝试使用Flutter来编写性能优异、跨平台、渲染一致性好的App。当然,在追求效率的同时,也不要忘了给你的代码添加更多严谨的限制,来保证代码的质量。今天我给大家推荐一个插件,用于给提交代码到Github或者GitLab时,在本地使用dart语言,即可限制提交代码的质量。

    Git Hooks

    Git Hooks是什么,Hooks顾名思义,就是钩子。它在Git中的作用就是在我们通过git命令操作仓库或者添加项目文件时,运行一些脚本,脚本通过即可完成事件,如果失败就被终止事件。这里是官方定义的所有钩子,有兴趣的可以一一查看。比如我们在.git/hooks/下新建了一个pre-commit文件,并输入以下内容

    #!/bin/sh
    
    echo '文件正在提交'
    exit(-1)
    

    然后我们在命令行中执行

    git add test
    git commit -m '提交信息'
    

    然后我们就会在命令行看到文件正在提交,并且文件最后没有提交到本地仓库,因为上面我exit了。

    这样,我们就可以在这个文件中写一些校验,比如通过dartanalyzer查看本地项目语法是否有语法问题。

    git_hooks

    这是一个Dart命令行插件,也是一个Dart插件。我们看到上面使用shell脚本来写校验,它存在一些问题:

    • 每个人的.git文件夹是不通过版本管理的,所以一个人第一次拉了代码,在.git/hooks文件夹下是不会存在能运行的hooks文件的
    • shell脚本比较生涩难写,上手难度高

    git_hooks库就是为了解决上面问题。它的作用就是能通过命令生成所有hooks,然后在我们通过git命令提交代码时,可以通过dart来进行提交前或者提交信息的校验。它让我们程序员可以忽略hooks文件存在,在dart代码中实现对所有钩子的操作。

    这里我们定一个我们能看懂的术语

    我们可以通过下面命令来安装它,安装它前请保证你的dart已经安装且已经配置了环境变量,还要保证你的 dart 版本大于 2.1.0

    运行命令dart --version查看dart版本号

    然后运行pub global activate git_hooks即可全局安装git_hooks命令

    创建hooks项目文件

    当我们打开一个拥有git版本管理的项目(在项目中可看到.git文件夹)

    在项目中的pubspec.yaml文件中添加

    dev_dependencies:
      git_hooks: ^0.1.5
    

    创建hooks文件dart钩子文件的命令是:

    git_hooks create {{targetFileName}}
    
    • targetFileName指的是dart钩子文件,它可以是项目中任何位置,比如在根目录下的git_hooks.dart文件(这也是如果此参数不传默认会创建的文件)

    那我们来执行:

    git_hooks create git_hooks.dart
    

    如果输出

    create files...                        
    All files wrote successful!
    0.2s
    

    那说明我们已经创建成功。我们来检查一下文件是否生成成功,查看.git/hooks文件下是否有多个文件例如pre-commit,pre-push等等,查看根目录下是否已生成git_hooks.dart文件

    打开git_hooks.dart文件会看到如下

    import 'package:git_hooks/git_hooks.dart';
    // import 'dart:io';
    
    void main(List arguments) {
      // ignore: omit_local_variable_types
      Map<Git, UserBackFun> params = {
        Git.commitMsg: commitMsg,
        Git.preCommit: preCommit
      };
      GitHooks.call(arguments, params);
    }
    
    Future<bool> commitMsg() async {
      // String rootDir = Directory.current.path;
      // String commitMsg = Utils.getCommitEditMsg();
      // if (commitMsg.startsWith('fix:')) {
      //   return true; // you can return true let commit go
      // } else
      //   return false;
      return true;
    }
    
    Future<bool> preCommit() async {
      // try {
      //   ProcessResult result = await Process.run('dartanalyzer', ['bin']);
      //   print(result.stdout);
      //   if (result.exitCode != 0) return false;
      // } catch (e) {
      //   return false;
      // }
      return true;
    }
    

    解释:

    • main方法下的params是一个Map,是我们想要自定义的钩子集合,每个钩子对应下面具体的函数
    • GitHooks.call 是固定写法,库的内部会执行钩子函数并校验
    • commitMsg函数是一个例子,当执行git的commit-msg脚本时,会执行此函数,如果返回false,会终止git操作

    我们尝试把注释打开

    Future<bool> commitMsg() async {
      var commitMsg = Utils.getCommitEditMsg();
      if (commitMsg.startsWith('fix:')) {
        return true; // you can return true let commit go
      } else  {
        print('you should add `fix` in the commit message');
        return false;
      }
    }
    

    然后在项目路径的命令行下执行:

    git add git_hooks.dart
    git commit -m '提交信息'
    

    脚本输出如下

    you should add `fix` in the commit message
    

    并且文件没有被提交到本地仓库。

    大功告成!

    删除所有hooks文件

    当我们有一天被自己写的钩子折磨,不想再用此校验,我们有两个方式来删除钩子

    1. 删除.git/hooks文件夹,注意是hooks文件夹而不是.git文件夹
    2. 通过命令git_hooks uninstall来删除

    其它钩子的枚举

    你可以通过下面的枚举,添加更多的钩子操作

    enum Git {
      applypatchMsg,
      preApplypatch,
      postApplypatch,
      preCommit,
      prepareCommitMsg,
      commitMsg,
      postCommit,
      preRebase,
      postCheckout,
      postMerge,
      prePush,
      preReceive,
      update,
      postReceive,
      postUpdate,
      pushToCheckout,
      preAutoGc,
      postRewrite,
      sendemailValidate
    }
    

    具体含义可以参考git官方文档

    结语

    上面是我的一个例子,当然我们可以使用该工具做更多的事情,比如使用dartanalyzer检查代码质量,使用dartfmt来检查代码文件格式是否对齐等等。

    pub仓库地址

    github地址

    git hooks 官方文档


    起源地下载网 » 使用git_hooks库助力Flutter团队编码规范

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元