对于具有一定工程素养的同学来说, 都会尤为注重编码规范, 而代码风格检查(lint)是确保编码规范一致性的重要手段.

lint, 即对代码进行静态分析, 并试图找出潜在问题的工具.

使用Lint好处

更高的代码可读性. 代码写出来最终还是需要给其他人阅读的, 乱乱糟糟的代码, 会让代码阅读者望而却步, 代码通常难以理解, 也就无从谈起代码的可维护性了.

更少的bug. 有研究表明, 全球因软件Bug造成的经济损失约3000多亿美金

更高的开发效率, Lint能够很容易的帮助我们发现低级/显而易见的错误.

前端Lint工具

ESLint

Standard

SCSSLint

JSONLint

HTMLHint

github出品Lint工具列表

何时进行代码检查

目前比较常见的代码检查工作流分为本地和远程两种:

1. 本地提前代码前(git hooks触发)

代码commit => 触发git precommit钩子 => 代码检查发现问题(本地) =>

修复问题 => 代码重新commit => 触发git precommit钩子 => 代码检查发现问题(本地)

复制代码

2. 持续集成阶段(CI)

代码提交 => 代码检查发现问题(远程) => 修复问题 => 代码重新提交 => 代码检查通过(远程)

复制代码

远程Lint涉及多较多的配置, 且远程Lint的反馈链条太长,不作过多介绍.

这里主要讲解下本地提前代码前, 如何进行代码检查.

本地代码提交前Lint

在本地进行代码检查, 是比较方便的. 常见的做法是使用husky或pre-commit在本地代码提交前进行Lint

这里, 我们以husky为例, 使用vue/cli 3.0创建的vue工程当中来实践下

vue/cli 3.0创建工程的过程, 这里不再介绍, 有需要的同学, 可以参考下vue/cli官网

使用husky

安装依赖

yarn add husky --dev

复制代码

或者

npm install -D husky

复制代码

修改package.json

修改package.json, 添加以下配置

"husky": {

"hooks": {

"pre-commit": "yarn lint"

}

}

复制代码

"pre-commit"调用的"yarn lint"命令, 即package.json中"script"中配置的命令:

"scripts": {

"serve": "vue-cli-service serve",

"build": "vue-cli-service build",

"lint": "vue-cli-service lint",

"test:unit": "vue-cli-service test:unit"

}

复制代码

尝试git commit

此时, 修改本地代码, 故意写出一些错误代码, 然后提交代码, 在git commit时, 得到的结果可能如下:

$ git commit -m "test: add error code for test"

husky > pre-commit (node v10.15.3)

$ vue-cli-service lint

error: Parsing error: Unterminated string constant

22 | methods: {

23 | submit() {

> 24 | this.$http.get('xxxxhello).then(res => {

| ^

25 | this.list = res.data.data.list

26 |

27 | }); at src\views\About.vue:38:21:

36 | methods: {

37 | submit() {

> 38 | this.$http.get('xxxxhello).then(res => {

| ^

39 | this.list = res.data.data.list

40 |

41 | });

1 error found.

error Command failed with exit code 1.

info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

husky > pre-commit hook failed (add --no-verify to bypass)

error Command failed with exit code 1.

复制代码

渐进式使用Lint工具

按上面的做法, 会将整个仓库在提交时都会进行格式化. 但在实际工作当中, 有些仓库是存量的, 已经有不少代码编写不规范, 但并不影响功能. 因此, 多数情况下, 大家还是希望在项目当中能够渐进式的使用这些工具. 相对而言, 保证业务系统的稳定性是最重要的事情. 针对此种场景, 我们可以考虑使用lint-staged

lint-staged

lint-staged 就是基于此种场景开发的,其中 staged 是 Git 里面的概念,指待提交区,使用git commit -a,或者先 git add 然后 git commit 的时候,你的修改代码都会经过待提交区。

lint-staged用法

安装依赖

yarn add lint-staged --dev

复制代码

或者

npm install -D lint-staged

复制代码

修改package.json

修改package.json

"husky": {

"hooks": {

"pre-commit": "lint-staged"

}

},

"lint-staged": {

"src/**/*.{js,vue}": [

"vue-cli-service lint",

"git add"

]

}

复制代码

尝试提交代码

$ git commit -m "test: test lint "

husky > pre-commit (node v10.15.3)

‼ Some of your tasks use `git add` command. Please remove it from the config since all modifications made by tasks will be automatically added to the git commit index.

[STARTED] Preparing...

[SUCCESS] Preparing...

[STARTED] Running tasks...

[STARTED] Running tasks for src/**/*.{js,vue}

[STARTED] vue-cli-service lint

[FAILED] vue-cli-service lint [FAILED]

[FAILED] vue-cli-service lint [FAILED]

[SUCCESS] Running tasks...

[STARTED] Applying modifications...

[SKIPPED] Skipped because of errors from tasks.

[STARTED] Reverting to original state because of errors...

[SUCCESS] Reverting to original state because of errors...

[STARTED] Cleaning up...

[SUCCESS] Cleaning up...

× vue-cli-service lint:

error: Parsing error: Unterminated string constant

22 | methods: {

23 | submit() {

> 24 | this.$http.get(xxxxhello").then(res => {

| ^

25 | this.list = res.data.data.list;

26 | });

27 | } at src\views\About.vue:38:30:

36 | methods: {

37 | submit() {

> 38 | this.$http.get(xxxxhello").then(res => {

| ^

39 | this.list = res.data.data.list;

40 | });

41 | }

1 error found.

husky > pre-commit hook failed (add --no-verify to bypass)

error Command failed with exit code 1.

复制代码

更多选择

实际上, lint-staged可以让你在提交代码前有更多的操作自由度, 比如添加以下配置, 能够自动修复错误:

"lint-staged": {

"src/**/*.{js,vue}": [

"vue-cli-service lint --fix",

"git add"

]

}

复制代码

或者使用下面的配置, 自动格式化代码(请谨慎使用)

"lint-staged": {

"src/**/*.{js,vue}": [

"vue-cli-service lint --fix",

"prettier --write",

"git add"

]

}

复制代码

相关链接

ESLint

Standard

SCSSLint

JSONLint

HTMLHint

github出品Lint工具列表

husky

lint-staged

pre-commit

vue/cli官网

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[利用husky&lint-staged构建代码检查工作流]http://www.zyiz.net/tech/detail-141701.html

如何安装husky_利用huskylint-staged构建代码检查工作流相关推荐

  1. 用 husky 和 lint-staged 构建代码检查工作流

    前言 一个项目如果涉及到多人协作,由于每个人代码的书写习惯和风格不太一样,如果没有统一的规范,那就会很乱,这对代码的可维护性大大降低. 所以现代工程有个一环节就是代码风格检查(Code Linting ...

  2. gitlab+jenkins 利用webhook自动构建代码

    每次代码push后,还要去手动点jenkins构建,感觉这一步挺多余的,想省掉这一步.google了下,有很多种方式,这次采用gitlab的webhook来触发jenkins,实现自动构建. 版本 系 ...

  3. 《软件测试的艺术》第3章:代码检查、走查与评审

    <软件测试的艺术>: 软件开发人员通常不会考虑到的一种测试形式:人工测试.大多数人认为,因为程序是为了供机器执行而编写的,那么也应由机器来对程序进行测试.这种想法是有问题的.人工测试方法在 ...

  4. docker安装mysql redis_Docker安装Mysql和Redis以及构建部署应用镜像

    为了方便本地测试项目,为了方便开启新的环境,为了方便部署,打算本地利用Docker安装Mysql和Redis. 搭建Springboot项目,编写Dockerfile,打包构建镜像. 简单使用dock ...

  5. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目 在上一篇<Vue2+VueRouter2+ ...

  6. 【CentOS】安装部署jenkins从git获取代码[转]

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  7. gulp 项目构建 代码压缩与混淆

    1.gulp安装 需要全局安装:npm install gulp -g 还需要本地安装,在项目目录中:npm install gulp --save 2.gulp使用 在项目目录中新建1个gulpfi ...

  8. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  9. 微信小程序本地存储存储_如何利用本地存储构建快速的应用程序

    微信小程序本地存储存储 by Nikita Kozlov 由Nikita Kozlov 如何利用本地存储构建快速的应用程序 (How to leverage Local Storage to buil ...

最新文章

  1. 清华大学施路平:双脑驱动的人工通用智能
  2. Python基础(3) - 数据类型:2字符串类型
  3. 美国宇航局:十年内VR/AR设备将成为标配
  4. 太难了~面试官让我结合案例讲讲自己对Spring事务传播行为的理解!
  5. matlab图像输出表格_matlab 图像输出3维字
  6. Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
  7. 太阳能板清洗机器人科沃斯_太阳能电池板清洁机器人
  8. 4090万美元成交!马斯克又卖出三处住宅以兑现“无房产”诺言
  9. paperwhite3翻页_Kindle vs. Paperwhite vs. Voyage vs. Oasis:您应该购买哪种Kindle?
  10. 小米12X、小米12、小米12 Pro参数对比
  11. 视频编辑软件编辑星海外英文网站上线
  12. c++ 中. 和 -,波浪号 ~ 符号怎么用 ————很重要
  13. [codeforces 718E]Matvey's Birthday
  14. RHCSA-A2.配置默认软件仓库
  15. 【陈工笔记】【复盘】# 基于视频流的人脸打卡系统 #
  16. 4. Spring Cloud Gateway自定义Filter
  17. Mybatis 中的缓存处理
  18. 湖北省计算机四级报名考试,2021上半年全国大学英语四级考试(湖北考区)报名须知...
  19. 全媒社:媒体报道宣传和渠道选择有密切关联
  20. 一个合格的初级前端工程师需要掌握的模块笔记

热门文章

  1. 计算机考研要准备哪些准备,大三 计算机科学与技术 要考研 要做哪些准备了?...
  2. XDOJ_37 排序2
  3. 科研篇(11):ICLR20 分类整理-对抗样本Meta-Learning
  4. 树莓派python离线语音识别_Raspberry Pi
  5. 在word中输入带方块的对号
  6. c 语言10个数首尾连接,相邻4个和,西安交通大学18年9月课程考试《计算机控制技术》作业考核试题答案...
  7. python爬虫爬取必应每日高清壁纸
  8. 怎么修改游戏服务器地址,如何修改游戏服务器ip地址
  9. python 批量下载知网(CNKI)论文
  10. 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟