如何安装husky_利用huskylint-staged构建代码检查工作流
对于具有一定工程素养的同学来说, 都会尤为注重编码规范, 而代码风格检查(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构建代码检查工作流相关推荐
- 用 husky 和 lint-staged 构建代码检查工作流
前言 一个项目如果涉及到多人协作,由于每个人代码的书写习惯和风格不太一样,如果没有统一的规范,那就会很乱,这对代码的可维护性大大降低. 所以现代工程有个一环节就是代码风格检查(Code Linting ...
- gitlab+jenkins 利用webhook自动构建代码
每次代码push后,还要去手动点jenkins构建,感觉这一步挺多余的,想省掉这一步.google了下,有很多种方式,这次采用gitlab的webhook来触发jenkins,实现自动构建. 版本 系 ...
- 《软件测试的艺术》第3章:代码检查、走查与评审
<软件测试的艺术>: 软件开发人员通常不会考虑到的一种测试形式:人工测试.大多数人认为,因为程序是为了供机器执行而编写的,那么也应由机器来对程序进行测试.这种想法是有问题的.人工测试方法在 ...
- docker安装mysql redis_Docker安装Mysql和Redis以及构建部署应用镜像
为了方便本地测试项目,为了方便开启新的环境,为了方便部署,打算本地利用Docker安装Mysql和Redis. 搭建Springboot项目,编写Dockerfile,打包构建镜像. 简单使用dock ...
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目 在上一篇<Vue2+VueRouter2+ ...
- 【CentOS】安装部署jenkins从git获取代码[转]
持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...
- gulp 项目构建 代码压缩与混淆
1.gulp安装 需要全局安装:npm install gulp -g 还需要本地安装,在项目目录中:npm install gulp --save 2.gulp使用 在项目目录中新建1个gulpfi ...
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 微信小程序本地存储存储_如何利用本地存储构建快速的应用程序
微信小程序本地存储存储 by Nikita Kozlov 由Nikita Kozlov 如何利用本地存储构建快速的应用程序 (How to leverage Local Storage to buil ...
最新文章
- 清华大学施路平:双脑驱动的人工通用智能
- Python基础(3) - 数据类型:2字符串类型
- 美国宇航局:十年内VR/AR设备将成为标配
- 太难了~面试官让我结合案例讲讲自己对Spring事务传播行为的理解!
- matlab图像输出表格_matlab 图像输出3维字
- Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
- 太阳能板清洗机器人科沃斯_太阳能电池板清洁机器人
- 4090万美元成交!马斯克又卖出三处住宅以兑现“无房产”诺言
- paperwhite3翻页_Kindle vs. Paperwhite vs. Voyage vs. Oasis:您应该购买哪种Kindle?
- 小米12X、小米12、小米12 Pro参数对比
- 视频编辑软件编辑星海外英文网站上线
- c++ 中. 和 -,波浪号 ~ 符号怎么用 ————很重要
- [codeforces 718E]Matvey's Birthday
- RHCSA-A2.配置默认软件仓库
- 【陈工笔记】【复盘】# 基于视频流的人脸打卡系统 #
- 4. Spring Cloud Gateway自定义Filter
- Mybatis 中的缓存处理
- 湖北省计算机四级报名考试,2021上半年全国大学英语四级考试(湖北考区)报名须知...
- 全媒社:媒体报道宣传和渠道选择有密切关联
- 一个合格的初级前端工程师需要掌握的模块笔记
热门文章
- 计算机考研要准备哪些准备,大三 计算机科学与技术 要考研 要做哪些准备了?...
- XDOJ_37 排序2
- 科研篇(11):ICLR20 分类整理-对抗样本Meta-Learning
- 树莓派python离线语音识别_Raspberry Pi
- 在word中输入带方块的对号
- c 语言10个数首尾连接,相邻4个和,西安交通大学18年9月课程考试《计算机控制技术》作业考核试题答案...
- python爬虫爬取必应每日高清壁纸
- 怎么修改游戏服务器地址,如何修改游戏服务器ip地址
- python 批量下载知网(CNKI)论文
- 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟