Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用 git 钩子, 检测 js 代码规范性(eslint、standard) #2

Open
gauseen opened this issue Sep 14, 2018 · 0 comments
Open

用 git 钩子, 检测 js 代码规范性(eslint、standard) #2

gauseen opened this issue Sep 14, 2018 · 0 comments
Assignees
Labels
javascript javascript lint 代码规范

Comments

@gauseen
Copy link
Owner

gauseen commented Sep 14, 2018

最终实现效果:
用 git commit 提交代码之前,利用 pre-commit git 钩子,实现代码规范检测(eslint、standard 规范),符合规范之后才可以提交到 git 仓库。这样在团队合作开发时,可以统一代码风格,如果某些同志代码不符合规范,是无法进行提交代码的。

demo地址

规范doc:
standard规范
eslint规范

git 钩子

那么问题来了,这种验证是如何实现的呢?!

请确保已经安装了: node | npm | git
安装传送门:node | npm | git

先说一下我的目录结构:

               |——node_modules            # 项目资源依赖(npm install 之后出现改文件夹)
               |
pre-commit ——— |——src —— test.js          # 项目代码(项目业务逻辑)
               |
               |——package.json            # 本地安装 npm 包 (npm init 之后出现该文件)

一、步骤如下(下面是 standard 规范验证):

  • 先按照鄙人的目录先创建目录,然后先后执行如下命令:
   git init                                    // 将本地项目设置为 git 项目
   git remote add origin url                   // url 为自己的 git 仓库地址
   npm init                                    // 将 pre-commit 项目设置为 npm 项目
   npm install --save-dev standard             // 安装 standard 规范
   npm install --save-dev husky@next           // 安装 husky git 钩子
   npm install --save-dev snazzy               // 安装 snazzy ,美化 standard 报错提示,eslint 规范不需要安装
  • 安装好依赖资源后,更改 package.json 文件
// package.json
{
 "husky": {
   "hooks": {
     "pre-commit": "standard \"src/**/*.{js,vue,wpy}\" | snazzy",
   }
 }
}

注::point_right: 检测 src 目录下的所有文件后缀为 .js || .vue || .wpy 的文件编码,是否符合规范。
若不符合,git 钩子将会阻止 git 继续 commit, 并且会报出错误信息;
若符合代码规范,git commit 就会成功提交到本地仓库 👈

当然你可以绕过代码检测强制提交:

git add . && git commit --no-verify -m "代码规范强制提交测试"

standard 规范错误提示如下:

// standard 规范默认错误提示:
D:\pre-commit\src\test.js:2:19: Extra semicolon.
------------------------------------------------
// 利用 snazzy 美化后的错误提示:
2:19  error  Extra semicolon
✖ 1 problem

二、步骤如下(下面是 eslint 规范验证):

  • 先按照鄙人的目录先创建目录,然后先后执行如下命令:
   git init                                    // 将本地项目设置为 git 项目
   git remote add origin url                   // url 为自己的 git 仓库地址
   npm init                                    // 将 pre-commit 项目设置为 npm 项目
   npm install --save-dev eslint               // 安装 eslint 规范
   npm install --save-dev husky@next           // 安装 husky git 钩子
   
   注意,执行命令:
   $ ./node_modules/.bin/eslint --init         // 生成 .eslintrc.js 文件,可自定义代码风格

注::point_right: eslint 自定义代码规范详情 传送门;.eslintrc.js配置详解传送门 👈

  • 安装好依赖资源后,更改 package.json 文件
// package.json
{
 "husky": {
   "hooks": {
     "pre-commit": "eslint \"src/**/*.{js,vue,wpy}\"",
   }
 }
}

当然你可以绕过代码检测强制提交:

git add . && git commit --no-verify -m "代码规范强制提交测试"

eslint 规范错误提示如下:

// eslint 规范错误提示

D:\fe\pre-commit\src\test.js
  1:13  error  Strings must use doublequote                     quotes
  1:28  error  Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style
  1:28  error  Missing semicolon                                semi
  2:1   error  Unexpected console statement                     no-console
  2:20  error  Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style

✖ 5 problems (5 errors, 0 warnings)
✖ 1 problem

按照相应的错提示,更改代码,符合规范后,即可提交到 git 仓库。

💯 进阶

⚡ 问题:
无论修改了多少代码,每次提交代码,,检测代码总是检测指定目录下所有的文件。这样就有点尴尬了,这样检测时间比较长,造成资源浪费。如何解决呢?!

☀️ 解决:
可以结合开源库 lint-staged 做相应的修改,这个库就能保证每次检测修改的文件。

欢迎 star ⭐ ⭐ ⭐ ⭐ ⭐

@gauseen gauseen added javascript javascript lint 代码规范 labels Sep 14, 2018
@gauseen gauseen self-assigned this Oct 18, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
javascript javascript lint 代码规范
Projects
None yet
Development

No branches or pull requests

1 participant