金沙澳门官网网址_金沙国际登陆

欢迎加入金沙澳门官网网址体验更多不一样的精彩.,金沙国际登陆提供最丰厚回馈!,因为金沙澳门官网网址这里的游戏是多种多样的,为大家打造一个最专业的化的超级五星酒店。

金沙澳门官网网址 > 金沙澳门官网网址 > 嘲谑前端组件化的踩坑之路,代码静态质量检查

原标题:嘲谑前端组件化的踩坑之路,代码静态质量检查

浏览次数:66 时间:2019-10-10

JavaScript 代码静态质量检查

2015/07/15 · JavaScript · 质量检查

原文出处: 百度efe - 我佛山人(@i我佛山人)   

自鸿蒙初判,Brendan Eich 10 天捏出 Mocha 之后,即便进化成 EcmaScript,这个语言依旧毁誉相随。那些经过重重劫难,侥幸渡劫成功的苦主标识了诸多天坑(见 JavaScript Garden) —— 当然,你也可以称之 feature。据无责任乱猜,Douglas Crockford 也没少踩坑,于是才有了蝴蝶书《JavaScript: The Good Parts》,下雨天与 JSLint 一起使用会更配哟。

图片 1

《JavaScript: The Definitive Guide》 V.S. 《JavaScript: The Good Parts》

时至今日,代码的静态质量检查在项目质量保障方面的重要性与必要性已毋庸置疑。越来越多的开发者意识到了这一点,纷纷在项目构建流程或者源码控制系统中添加静态检查的 hook。本文将依时间顺序,选出 JavaScript 史上的主要几个 Linter 作横向比较,最终属意谁家,那就见仁见智了。

梳理前端开发使用eslint和prettier来检查和格式化代码问题

2018/06/11 · JavaScript · 格式化

原文出处: Edwin   

吐槽前端组件化的踩坑之路

2016/05/10 · 基础技术 · 前端构建, 组件化

本文作者: 伯乐在线 - 亚里士朱德 。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

这篇文章分享的不是成功的经验,而是失败的教训~

JSLint

JSLint 的名字源于早期用于检查 C 语言代码质量的 Lint,老道把认为非 Good Parts 、有陷阱的部分全部报 warning,而且绝不允许妥协(当前版本已经允许部分的可配置项),固执得令人心疼。

虽然这个在 2002 年的 JSLint 代表着先进的方向,但是前端的发展一日千里,严格不妥协的 JSLint 开始阻碍前端的发展 —— 例如函数内变量全部集中在顶部定义,推荐一个 var 定义多个变量等。最最最重要的是,老道拒绝开源 JSLint(无责任乱猜,也许JSLint 的实现代码违反它自己制定的规则)。

截止 2015年6月9日,JSLint 仍然在更新,官网上写着 JSLint edition 2015-06-02 BETA,固执的老道。

一、问题痛点

  • 在团队的项目开发过程中,代码维护所占的时间比重往往大于新功能的开发。因此编写符合团队编码规范的代码是至关重要的,这样做不仅可以很大程度地避免基本语法错误,也保证了代码的可读性。
  • 对于代码版本管理系统(svn 和 git或者其他),代码格式不一致带来的问题是严重的,在代码一致的情况下,因为格式不同,触发了版本管理系统标记为 diff,导致无法检查代码和校验。

但是需要知道的是,开发规范不仅仅包含代码格式规范,还有很多内容,这里只是单独说明代码格式化规范而已。

设坑

关于为什么要研究组件化以及之前对组件化实现方式的理解都在这篇文章——《利用handlebars实现后端组件化》。本来按照之前的思路,觉得组件化应该有三种实现方式,一种是后端模板;一种是浏览器端由js实现,包括reactjs的组件、angular的指令等,不过这些对css文件无法管理(有个插件号称完美实现组件化,研究完之后再分析);最后一种就是利用构建工具实现组件化。

如果真能找到这样一种构建工具,不依赖前后端语言、模板、框架,在构建代码的时候直接直接将组件打包是不是很完美?如果你也这么想,那么恭喜你可以跟我一其踏上一段踩坑之旅了。

JSHint

鉴于 JSLint 的现状,Anton Kovalyov 以 JSLint 为蓝本,在社区力量的帮助下实现了开源的 JSHint

相较之下,JSHint 更友好,可配置性更高。由于大家受 JSLint 的压迫太久,而且得益于开源的优势,风头很快盖过 JSLint,一时无两,获得大量 IDE/Editor 的支持。然而成败萧何,JSHint 的成功源于对 JSLint 的改进,但同样继承了 JSLint 的诸多缺点,比如不易扩展,难以根据报错信息定位到具体的规则配置等。虽然有专门的文档说明,但是修复的成本仍旧不低,于是出现了JSLint Error Explanations 这样的网站,针对 JSLint/JSHint/ESLint 报的错误作修复说明 —— “啪啪”,这对 JSHint 团队来说无异于打脸。

JSHint 团队也逐渐意识到这个问题的重要性,2012 年时曾有 讨论 使用 esprima 生成 AST(见 jshint-next,提示该项目已过期,已 merge 到主项目,但在 2013/5 又从主项目移除,现已难觅芳踪,原因未明),并有专门针对 JSHint 的 warning 作修复的fixmyjs。

(一)关于代码格式规范问题

代码格式规范的标准可以参考各大主流公司和社区,以下都是一些常用主流规范:

  • 前端开发规范之命名规范、html规范、css规范、js规范 – 腾讯Web前端 IMWeb 团队社区 | blog | 团队博客 腾讯的
  • 编写「可读」代码的实践 | Taobao FED | 淘宝前端团队 淘宝的
  • GitHub – airbnb/javascript: JavaScript Style Guide airbnb 的
  • google 的
  • vue 的

参考别人的规范,制定适合自己团队使用的规范,太过复杂的规范执行起来太麻烦,太过简单的规范不如没有规范。

没有绝对的规范,只有适合的规范!

入坑

目标已经明确的话开始寻找工具。理想的是有工具插件直接实现组件化,差一点的话自己稍加改造实现也可以接受。看看现在比较流行的工程化工具:

Closure Linter

Closure Linter 属于 Closure 家族成员,源于 2004 年的 Gmail 项目,最初只是内部使用,后来觉得应当 兼济天下,于是在 2007 年后作为 Closure Tools 系列开放给外部使用。Closure Linter 主要是按照《Google JavaScript Style Guide》来作检查与修复。限于 Closure 的家族特性,使用范围并不大。

(二)关于为什么要用 eslint 和 prettier问题

  • prettier 主要是为了格式化代码,而在没有 prettier 之前,是用 eslint —fix和 编辑器自带代码格式来进行代码格式化的。
    • 缺点:每种编辑器会有不一样的代码格式,而且配置会比较麻烦。
    • prettier 已经逐渐成为业界主流的代码风格格式化工具。
    • 减轻 eslint 等工具的校验规则,因为将代码样式校验交给了 prettier,所以可以将代码校验的规则更准确地应用到代码真正的规范上面。
  • eslint 是主要还是负责代码规则校验,prettier 只调整代码风格,代码样式,eslint 才是真正检查代码是否符合规范的工具。

所以两者是需要配合使用的。

webpack

首先研究这个最新最火的工具,一进入官网就被那个炫酷的css3立方体吸引了,看上去很高大上的样子。官网上内容很多,虽然是英文的但是问题不大。看到菜单上有一系列教程(list of tutorials)非常欣喜,心想好软件就是不一样,教程都写得这么多。一点开傻眼了,根本就不是什么学习教程,就是各种语言凑起来的文章,完全无法引导新手很好的学习,也没有分类。照着例子使用了之后发现如其所说只是个模块打包工具,恨不能让任何页面只引用一个js一个css,对第三方依赖的处理也是狗血,要么合并成一个,要么一个一个配置,手动在html中维护,而且还是侵入式的改变源代码内容。功能很简单,实现过程很复杂,蛋疼之后更是伴随一阵心疼,遂放弃。
如有不对之处,欢迎webpack资深玩家拍砖指点。

JSCS

自 Marat Dulin 于 2003.6.17 日凌晨发布第一个版本开始,JSCS 就专注于代码风格层面的检查,这点从它的名字 JSCS - JavaScript Code Style 中可窥一斑:

JSCS is a code style linter for programmatically enforcing your style guide. You can configure JSCS for your project in detail using over 90 validation rules, including presets from popular style guides like jQuery, Airbnb, Google, and more.

再看它的 package.json 中的依赖包:

可以发现它使用了 esprima 生成 AST,再通过 estraverse 遍历作检查,因此性能上会逊于 JSLint 与 JSHint,但是带来的收益是易于维护和扩展,相对于性能上的损失,是完全值得的。另外,JSCS 可通过 esprima-harmony-jscs 实现对 ES6 的支持,并且自带错误修复技能。

JSCS 与 JSHint 份属同盟,互相使用对方作本项目的代码检查。

二、解决办法

旧有的解决办法是:

  • 使用 editorconfig 协助兼容开发工具的代码格式化。
  • 使用 eslint 检查代码
  • 使用 eslint —fix来修复不符合 eslint 规则的代码,它会自动根据设置的规则来改变代码(它会包含代码样式的规则,但是 eslint 的样式规则并不太准确)。
  • 手动修改剩下的有问题的地方,或者有些地方很难用规则来判断的时候,就需要手动修改。

新的解决办法是:

  • 使用 editorconfig 协助兼容开发工具的代码格式化。
  • 使用 eslint 检查代码。
  • 使用 prettier 格式化代码。(可以理解为prettier是 eslint —fix 的加强版,用 prettier 来代替 eslint-fix
  • 手动修改剩下的有问题的地方,或者有些地方很难用规则来判断的时候,就需要手动修改。

咋一看,其实没啥区别,甚至可能发现新解决办法会更加麻烦了一些,其实步骤上确实如此,但是真正操作上,会减轻 eslint 的规则编写,也会减少很多手动修改样式的地方,格式化后的代码会更加美观,耐看。

fis3

其实从fis刚出来的时候我就在关注fis,那时候因为觉得插件不够丰富,再加上项目中使用的是grunt,所以放弃了。这次看到fis的教学视频和fis3的时候我是内心有些激动的。一方面见其生机勃勃,另一方面介绍了百度产品实现组件化的经验。
事情真的那么完美吗?首先不得不承认fis3是一个比较成熟的构建工具,但是一上手就坑了我,release发布代码的时候不能清除目录,只能覆盖发布,号称400多个插件中也没找到可以实现的,我只能用一个字形容——囧。这种感觉就像你来到了一栋摩天大楼,但是它没有电梯,你只能自己爬上去。再细致研究发现其组件化也是依赖后端语言实现的,和后端模板集成在一起,做事情做一半,真是无语。至于Angular和Angular2这种靠前端模板的例子也不是我要找的答案。
不过其目录划分可能还有一些借鉴意义吧。

ESLint

无独有偶,同样是源于对 JSLint 与 JSHint 的不满,Nicholas C. Zakas 也在 JSCS 发布的当月开始造另一个新轮子 ——JSCheck(浓浓的山寨感扑面而来有没有),不过几天后即更名为 ESLint —— 再次表明,好名字重要性。

功能方面,ESLint 可以简单的理解成 JSHint + JSCS,基本上集成了两大基友的优点。ESLint 在初期也是依赖于 esprima生成 AST,后来为提高对 ES6 的支持,换成 esprima 的分支版本 espree。然而,espree 对 ES6 的支持仍然很有限,不过好在还有 Babel-ESLint。

三、具体操作

鉴于网上文章说明的比较混乱,这里主要是为了梳理整个流程和思路。

现坑

本文由金沙澳门官网网址发布于金沙澳门官网网址,转载请注明出处:嘲谑前端组件化的踩坑之路,代码静态质量检查

关键词:

上一篇:windows下的命令行工具babun,700多个PHP版本随时切

下一篇:前后端分离了,纯CSS打造银色MacBook