使用 ESLint, Prettier, Husky, Lint-staged 提升你的项目规范

本文写于 2020 年 11 月 7 日

大家应该都知道 ESLint 与 prettier,他们的用途分别在于约束代码和美化代码格式。

但我们并不能保证每次提交代码之前我们的项目都执行过了 ESLint 与 prettier,所以我们需要 Git Hook,它能让我们在 git 操作的各个阶段进行一些自定义的操作。

例如在 commit 时,我们会在 commit 之前执行 ESLint 与 prettier,如果执行出错,git 就会停止 commit 操作。

本文介绍的流程为:

  1. 利用 ESLint 和 Prettier 来提升代码质量;
  2. 套用如 Airbnb Style Guide 这类大型团队的 Style Guide;
  3. 使用 yarn/npm run lint 来格式化所有代码;
  4. 使用 Husky 及 Lint-staged 在 git commit 之前测试代码品质。

Prettier

首先介绍 Prettier,一个代码格式化工具。

Prettier 主要用来整理我们的代码格式。它刻意不提供太多的客制化功能,目的是不让开发团队花太多时间在讨论该用怎样的 Style,而能够有个一致的设计规范。

即使使用上 Prettier 绝大多数的定制选项,你的 JSON 文件也许也就只有 10 行。

Prettier 提供的另一项好处就是安装后即可上手,要安装只需要:yarn add --dev prettier,然后 ./node_modules/.bin/prettier --write file-path 即可格式化文件。

官网写的是 --write . 可以格式化所有文件,但在尝试后发现不太行,我们需要使用通配符来配置:./node_modules/.bin/prettier --write src/**

如果想要定制一些选项,可以创建 .prettierrc.json 文件,具体配置可以在官网查询,只有十几项。如果存在想忽略的文件夹,则可以新建一个 .prettierignore 文件夹。

ESLint

Linter 是一种静态程式分析的工具,能够帮助使用者找出程式中不符合团队定义之规则的代码。

对于 Javascript 这种动态的、弱类型的语言,如果能够加上一个在写程式时就提醒我们,哪一段代码在执行时可能会出问题的工具,可谓百利而无害!

ESLint 跟 Prettier 的区别在于:Prettier 旨在统一「代码样式」,而 ESLint 则重视「代码质量」。

例如在 ES6 环境中使用 const/let 而非 var、移除未被使用而无意义的 import、若是 function 的循环复杂度过高则需要调整设计等。

eslint 的另一个好处是:我们可以使用别人设定好的规则。

以这几年最流行的 Style Guide 为例:为 Github、MongoDB 等知名公司所使用的 Javascript Standard Style;Airbnb 所使用的 Airbnb Style Guide;以及 Google 的 Google Style Guide。

我比较喜欢 Airbnb 的 Style。

首先,可以安装 eslint:yarn add eslint,然后可以使用 npx eslint --init。一步步跟随者他的引导,选择 Airbnb 的代码样式。

eslint 有两个常用的命令:eslint --fix file-patheslint file-path。前者是修复可以自动修复的错误,后者是寻找是否存在 eslint 可以检查出得错误。

加入 scripts

这个时候我们的流程应该是什么呢?

  1. 首先使用 prettier 格式化代码;
  2. 然后使用 eslint 修复可以自动修复的错误;
  3. 最后再使用 eslint 查看哪些文件存在错误,我们去一一进行修改

所以,我们可以将这些操作加进 package.jsonscripts 之下:

"scripts": {
"lint": "./node_modules/.bin/prettier --write 'src/**' && ./node_modules/.bin/eslint --fix 'src/**' && ./node_modules/.bin/eslint ."
}

Husky 与 Lint-staged

当我们有了 Prettier 和 ESLint,在开发时已经能为我们避免掉许多不符合要求的代码了。或是当我们拿到一个新项目的时候,也可以通过这些步骤去格式化整个工程。

但就像文章开头说的那样,我们还需要 git hook 来帮助我们在 git 操作时进行操作——可以使用 Husky。

Husky 可以让我们在 git commit 或 git push 时执行一些动作,而 Lint-staged 则让我们可以 lint 那些已经 git add 的文件。

这两者的组合能够在我们真正 commit 之前就检查我们的代码是否符合我们的要求,同时可以主动帮我们修好一些能够修的错误。

yarn add -D husky lint-staged

接着在根目录创建 .huskyrc.json,写入:

{
"hooks": {
"pre-commit": "lint-staged"
}
}

然后再在根目录创建 .lintstagedrc.json,来检查并修正文件:

{
"*.+(ts|js|tsx|jsx)": ["prettier --write", "eslint --fix"],
"*.+(json|css|md)": ["prettier --write"]
}

如此一来,你每次 commit 之前,都会对文件执行操作了。

(完)

使用Husky提升你的项目规范的更多相关文章

  1. eslint+prettier+husky+lint-staged 统一前端代码规范

    eslint+prettier+husky+lint-staged 统一前端代码规范 遵循编码规范和使用语法检测,可以很好的提高代码的可读性,可维护性,并有效的减少一些编码错误. 1.终极目标 团队中 ...

  2. PAIP.提升效率----论项目知识库的建设。。

    PAIP.提升效率----论项目知识库的建设.. 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net ...

  3. 为了增强团队的协作和高效开发,提升代码质量,TGideas团队一起制订的代码规范。主要包括五部分内容:PC规范、移动端规范、性能优化、CP规范、其他项目规范

    http://tguide.qq.com/main/index.htm

  4. 分享一篇vue项目规范

    最近 Vue 用的比较多,而且因为公司里有实习生,当几个人写一个项目的时候,会出现很多问题,最麻烦的就是规范不统一,之前我有一篇文章是说, vue 是比较有规范的一种框架了,但是也会出现很多问题,所以 ...

  5. java项目规范

    一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写. 如:public class MyFirstClass{} 4. 变量 ...

  6. web前端项目规范

    项目目录规范 . ├─ css ├─ component ├─ img ├─ js ├─ page ├─ test ├─ package.json ├─ README.md css 存放样式类文件,且 ...

  7. React凤凰项目规范

    技术资源 基础语法 ES6 TS 框架 React Redux React-redux React-Router UmiJS Dva 组件库 AntDesign AntV 构建编译 Webpack b ...

  8. ATM购物车程序项目规范(更新到高级版)

    ATM购物车程序(高级版) 之前的低级版本已经删除,现在的内容太多,没时间把内容上传,有时间我会把项目源码奉上! 我已经把整个项目源码传到群文件里了,需要的可以加主页qq群号.同时群内也有免费的学习资 ...

  9. 项目规范和建立-从frozenui学习

    1.分支branches开发新功能,主干trunk是稳定发布的.因为frozenui下载完,看到branches比trunk多了一个版本 2.版本号定义,主版本.次版本.修订号 大版本号: 主版本号: ...

随机推荐

  1. 学习Puppet(二)

    puppet的工作流程 1.简介 puppet是一种采用C/S星状结构的linux.Unix平台的集中配置管理系统.puppet拥有自己的语言,可管理配置文件.用户.cron任务.软件包.系统服务等. ...

  2. 3.Spark设计与运行原理,基本操作

    1.Spark已打造出结构一体化.功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能. Spark生态系统主要包含Spark Core.Spark SQL.Spark St ...

  3. eclipse开发工具之"导入项目"

    1.选择菜单栏"file""下的"import" 2.选择Maven 在选中"Existing Maven Projects",然 ...

  4. sudo rosdep init 出现 ERROR: cannot download default sources list from:错误解决方法

    关于安装ROS时出现的rosdep init错误 sudo rosdep init ERROR: cannot download default sources list from: https:// ...

  5. 前端眼里的docker

    docker是什么 可以简单的认为docker容器是一个虚拟机,封装就是把这个虚拟机打包,打包后能在任何系统跑,docker装上即用.也可以形象的比喻成一个集装箱,把所有货物都打包好放到箱子里,不需要 ...

  6. Py的A+B

    程序会读入两行,每行都是一个数字,输出这两个数字的和 输入格式: 两行文字,每行都是一个数字 输出格式: 一行数字 输入样例: 18 21 输出样例: 39 代码: a = input() b = i ...

  7. 一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)

    效果展示 已经下载Demo的可以直接到第五步,已经配置好的并可以运行的可以直接到第七步. 1.在浏览器搜索 " 百度定位API ",点击下面这个链接 2.翻到最下面找到并点击 &q ...

  8. IDEA个人常用快捷键

    Ctrl+Z:撤销 Ctrl+Shift+Z:重做 Ctrl+X:剪贴 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+Y:删除当前行 Ctrl+D:复制当前行 Alt+向左箭头:返回上次光标位置 ...

  9. Java线程内存模型-JVM-底层原理

    public class Demo1 { private static boolean initFlag=false; public static void main(String[] args) t ...

  10. 面试官:ZAB协议是什么?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 这天是越来越热了,但是还是有很多 ...