用Node构建工具来约束你的git操作,让你生无可恋。

一、前言

今天看到小伙伴写的《你可能会忽略的git提交规范》,不禁想起自己那些不忍直视的提交信息,当然也不能怪自己,谁叫我能够随意的commit呢?上述文章中已经介绍了一些相关的工具以及规范,这里我再补充一些操作,以下内容算是一个简单的教程吧。

二、ESLint

既然要规范起来,当然要从最基本的JS代码规范开始,这里我们选择eslint作为代码规范检测工具。

1、安装ESLint
    cnpm i -g eslint
复制代码
2、设置配置文件

在根目录下创建.eslintrc.js文件,里面的配置比较的多,对于不同环境的配置也不太一样,可以查看官网文档,这里我们就简单配置一下普通JS文件的检测:

    module.exports = {extends: 'eslint:recommended',env: {browser: true,node: true,commonjs: true,es6: true,mocha: true},root: true,rules: {'no-console': 'off'}}
复制代码
3、验证代码质量与规范

我们可以创建一个app.js文件,输入一些内容,然后通过以下命令执行验证:

   eslint app.js
复制代码

如果你的代码不符合要求,那么控制台并会提示你哪些地方存在问题。

其实对于eslint大家再熟悉不过了,各种项目的脚手架工具里都通过webpack集成了它的功能,所以当你在执行npm run dev,如果代码不符合eslint的规范,你是不能够完成dev构建的。

但是有时候吧,烦不了,直接git add保存一下再说。现在我知道,这并不是一个好习惯,所以要改。

三、Husky和lint-staged

对的,你没看错,是Husky(哈士奇)。正如Husky官方文档中所说,

Git hooks made easy

对于这个hook这个词类比一下Vue中的生命周期,你就知道咋回事了。所以接下来,我们只需要通过这个库,就可以在git add 之前做一些不可描述的事了(所以你再仔细回味一下这个名字,是不是很皮)。

有了这个还不够,我们还需要lint-staged,它的作用文档中描述的也很清楚:

Run linters on git staged files

1、安装依赖
    cnpm i -D husky@next lint-staged
复制代码
2、配置package.json
    "lint-staged": {"*.js": ["eslint"]},"husky": {"hooks": {"pre-commit": "lint-staged"}}
复制代码

接下来,再也不能那么随意的执行git的add操作了。

四、validate-commit-msg

对于这个库的使用,前面所说的文章中已经介绍的很详细了,包括提供的一些Angular commit规范的参考文章。这里我们同样需要在husky中配置一下:

    "husky": {"hooks": {"pre-commit": "lint-staged","commit-msg": "validate-commit-msg"}}
复制代码

到这里基本上一个小型的代码规范化提交工作流程完成了。

五、生成日志

当然,你如果看过一些开源项目,在他们的项目中都有一个CHNAGELOG.md文件,这个文件主要是用来记录项目更新迭代的信息。这里我们可以采用conventional-changelog来生成日志文件:

1、安装依赖
    cnpm i -D conventional-changelogcnpm i -g conventional-changelog-cli
复制代码
2、配置package.json
    "scripts": {"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0","addChangelog": "conventional-changelog -p angular -i CHANGELOG.md -s"}
复制代码

接下来你可以通过npm run changelog生成完整的日志,前提是你的提交要符合Angular Commit标准。

六、写在结尾

这里只是简单的介绍了两种强制验证的情况,实际上我们也可以在pre-commit中加入csslint,当然肯定还有更多的例子,欢迎小伙伴们分享自己的惨痛经历。


喜欢本文的小伙伴们,欢迎关注我的订阅号超爱敲代码,查看更多内容.

约束你的git操作,让你生无可恋。相关推荐

  1. 学到生无可恋之 Redis(上)

    一把年纪了还是这么菜 本文主要学习自:Redis 核心技术与实战 学到生无可恋之 Redis(下) 1 Redis 是啥 Redis 是一个高性能的 Key-Value 数据库,key 的类型是字符串 ...

  2. 学到生无可恋之 Redis(下)

    为什么要学习? 还不是因为打工需要...... 本文主要学习自:Redis 核心技术与实战 学到生无可恋之 Redis(上) 1 Redis 缓存过期和淘汰策略 Redis 缓存使用内存来保存数据,避 ...

  3. wins10 系统晚上自动重启?解决办法:一旦点击就会令程序员生无可恋的msconfig——诊断启动(重启)置之死地而后生!!!

    嗯......好久没发博了..最近喜欢早起早早坐在工位前,今儿早来发现昨晚明明开了好多的文件程序,却消失不见,桌面整洁如新.. 于是怀疑是否是电脑晚上自动重启了,于是询了一下度娘,基本解决办法都类似, ...

  4. 生无可恋的一叶知秋#百度刘超事件#

    郑昀 20160705(微博:http://weibo.com/yunzheng) 一,一叶知秋 就百度刘超事件,有百度人反思『六年前,一些外来的空降兵带来了不一样的价值观』. 如果就这个『六年前』的 ...

  5. CentOS7 闹心巴拉到生无可恋

    终于成功的在两个虚拟机(名字分别为StudyLinux.CentOs 64bit)上查看了,各自的IP,纪念一下.... StudyLinux是快照创建出来的,发现两个快照的两个好处,一个是创建虚拟机 ...

  6. 致学生:你让我生无可恋,我让你深陷其中!

    (一)事情的发生是这样的 我为学生准备了一组要在课堂上通过上机观察.完善的代码,提前一天,放在QQ群中让学生下载. 我给压缩文件加了一个密码,目的是需要时他们再看,好按我设计的教学目标去做事.另外,也 ...

  7. 大数据学习心得、技术路径、生无可恋的朋友加油吧!明天就是你的天下

    申明: 本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同学. 前言: 一.背景介绍 二.大数据介绍 正文: 一. ...

  8. Kubernetes CrashLookBackOff的问题让我生无可恋

    事情是这样的,有个客户找到我们要查看具体的日期和时间,而我们项目目前只显示了日期,我觉得这个修改很简单呐,于是就决定改完立刻部署上线让客户使用. 改代码是很简单呐, 但是部署一到关键时刻就出问题. 昨 ...

  9. 国庆的人山人海,生无可恋脸

    由中国统计网举办的投票活动正在火热进行中,本次投票活动的前五名将获得免费书籍,一起来学习吧! 如何参加:点击阅读原文,进入报名和投票界面. 点击"我要参赛" 上传照片和信息 可以手 ...

最新文章

  1. 互联网天生本质与产业大局的开始
  2. 开箱即用的VScode C++环境
  3. create 2021 | 一图读懂汽车智能化分论坛
  4. php7.0扩展yac,php扩展之yac安装
  5. 05 Python字符串的通用操作
  6. 终于有人说清楚了!内卷和努力到底有啥区别?
  7. CRNN——卷积循环神经网络结构
  8. 威纶通触摸屏的自由口通讯
  9. Apache Doris ODBC mysql外表注意事项
  10. HttpWatch工具简介及使用技巧(转)
  11. WebBrowser打开Word文档的一些注意事项
  12. 用Python向MongoDB中插入大csv文件
  13. 用Django加PIL做一个证件照模板生成器网页
  14. python三维矩阵乘法_tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘
  15. 计算机配置主要看哪些东西,买电脑主要看哪些配置
  16. 我的股票交易成长经历
  17. 时空同步图卷积网络:时空网络数据预测的新框架
  18. oracle 删除主键级联删除唯一索引
  19. 长城汽车使用ENOVIA物料合规管理模块(MCC)
  20. JAVA并发编程-synchronized-脏读

热门文章

  1. 2015阿里校园招聘测试开发面试经验(广州站)
  2. 大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer
  3. 中英文维基百科语料上的Word2Vec实验
  4. COGS-2049 疯狂动物城
  5. Git使用时无.ssh目录:/.ssh: No such file or directory
  6. 04 Android Activity生命周期
  7. 使用Matlab提取ADC数据占空比变化的波形
  8. 大B和小b的区别及关联
  9. 洛谷p1307数字反转 c语言
  10. 数字图像处理之伽马(gamma)变换