可能很多同学跟我原来一样,觉得前端静态代码校验无非是告诉你代码缩进等格式问题,加上本身自己写代码就比较注意格式问题,所以觉得前端代码校验没什么必要。但其实前端代码校验能带给我们的远不止这些。
某天我在给页面添加链接的时候写下了如下代码:
<a href="https://www.youzan.com" target="_blank">点我</a>
正当我想继续的时候,突然发现我的编辑器提醒我这行代码有错误(使用 Felint
后),提示如下:
Using target="_blank" without rel="noopener noreferrer" is a security risk: see https://mathiasbynens.github.io/rel-noopener (react/jsx-no-target-blank)
我才知道之前一直习惯或者以为正确的写法原来隐藏着潜在的安全问题。
前端领域的技术更新和迭代是非常迅速的,导致的结果是每个公司可能都会存在一些老项目,这些老项目使用老的打包技术,没有完善的 polyfill ,不允许使用js的高级语法和特性。这导致我们在维护这些老项目时需要时刻小心不能习惯性的使用一些js的高级语法。
但是人总会犯错,这种繁复一致的工作交给机器是最合适的。
所以我们最终通过设置该项目所允许的es版本,并通过一些强制检测措施,有效避免了在老项目中使用js高级语法的问题。
Felint
的初衷其实从上面两个例子中可以看出,前端的静态代码检测需要做到两点:
1. 提供个工具告知你的代码格式有哪些地方可以优化,并告知你为什么应该这么优化
2. 确保不通过检查不能提交代码,而不是依靠口头约定(比如约定提交代码前要用某个工具检查下代码格式之类的)
所以 Felint
的初衷便是以上两点。
对于第一点,其实已经有非常多的工具可以做到:jsLint
, jsHint
, Eslint
等工具都能做到静态代码检测及错误提示。
Eslint 完善的插件机制和灵活的配置项让 Felint
选择其作为js代码检测工具,对于css,Felint
则选择使用 stylelint 作为 css 代码检测工具。
对于第二点,有些公司团队用的是 Git 服务器加钩子脚本检查的方式,这并不完美,比如:1)从提交 push 到服务器告知代码是否通过检查有等待时间,2)这意味着一刀切,如果有小伙伴去改老项目,一改就是几十个文件,没时间一次性把所有的文件都改成正确格式,那就懵逼了。
有赞前端团队的 Felint
方案借助 git hook
实现,在本地提交 commit 生效前检查代码格式,有问题就提示并终止 本次 commit 提交。也可以使用 Git 本身就支持的 -n 参数,应对上提到的第二种情况。目前有赞内部绝大多数前端项目都已使用 Felint
来规范代码编写。
Felint
搞成一个正儿八经的工具产品在项目中使用 Felint
后,Felint
将对你的每次 commit
中所修改的文件进行代码校验。除非校验通过或者 commit 的时候加 -n 参数,否则 Felint
将拒绝本次 commit
。
在需要使用静态代码检测的项目工程下直接运行 felint init
命令即可。
Feint
默认提供了适用于react
、vue
、es6
、es5
等应对不同应用场景的规则配置文件供使用者选择使用,大大节约了手动配置的时间。
Felint
将规则配置文件统一放置在一个指定的单独的 git 仓库内,团队内部可以共同维护,并提供方便的命令一键更新本地工程项目内的规则配置。
如果你对默认的规则配置不满意,则可通过 Felint
方便的对默认规则配置做微调。
Felint
默认配置,打造自己的规则配置由于 Felint
将全部的默认 配置内容
单独保存在 felint-config 中,并提供自定义参数指定 配置内容
的 git 地址,这意味着你可以重新打造一份符合项目特殊需求的 Eslint
和 stylelint
插件集和配置而不必受限于 Felint
官方默认的配置。
Felint
提供两个不同的命令行参数用于分别校验 js 和 css,举个例子,你可以写一个npm命令类似这样:
package.json
"scripts": {
"lint": "npm install --production && felint lintjs ./src/ && felint lintcss ./src/**/*.scss"
}
每次当你运行 npm run lint
的时候,Felint
将主动检测 src 目录下的所有 js(jsx) 和 scss 文件。
Felint
展望围绕 Felint 的前端静态代码检测方案还有很多事情可以做。比如我们自己写了一个 Eslint 插件 eslint-plugin-youzan。该插件可以检测出前端代码中常见的错别字并提示。
非常希望得到大家的批评和建议,一起建立一个更好的 Felint
。完整代码和使用指南请移步 Felint 开源项目说明
欢迎关注我们的公众号
Original url: Access
Created at: 2019-09-26 17:36:58
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论