我记得10年前,我用Javascript只是为了补充一下Asp.net上AjaxControl的动态数据加载,而现在Javascript几乎成为了前端开发的主流语言。
如果仍然用10年前那种把Javascript当成小脚本的方式来完成现在的前端项目,那么任何一个项目都可能变成一个噩梦。
为什么是ESlint
众所周知,Javascript是一种动态语言,其优势很明显,缺点也众所周知(参考知乎上那些大神对Javascript的吐槽),用Javascript写出来的代码,通常靠代码走查或者运行的方式来发现其中的错误。ESLint的出现,则扭转了这种被动局面。
ESLint的配置和使用方式网上有很多,建议大家选择Airbnb的规则对代码进行检查(文章的最后给出了Airbnb规则的安装配置参考)。
基于Airbnb配置的ESLint
基于Airbnb配置的ESLint,给我们带来了如下好处:
- 检查import 的正确性(规则名称:import/named)
- 在模块内,对没有声明而使用的变量报错(规则名称:no-undef)
- 提出代码编写风格的建议
第1,2 两点对优化/重构代码尤其重要,第3点则能帮助我们很快了解并掌握了es6的规范,让我们看上去像一个使用es6的“老手”。(实际上,任何一门语言,都可以通过它的lint工具让你快速掌握这门语言的特性)
参考
掘金的eslint的使用指南(非常全面的配置和使用细则,偶尔我也会去参考)
如何充分利用Airbnb的配置
import的正确性检查
Airbnb中有一个规则import/named,可以检查从其它模块中引入的变量名称是否正确。如果你是一个持续重构/改善代码的“狂热分子”,我想你已经懂了这其中的巨大价值。
libs.js
export const UpdateMemeberInfomation = (info)=>{ /* 业务代码 */ };
export const GetMemberInforamtion = (id)=>{ /* 业务代码 */ };
index.js
import { UpatMemberInforamtion } from './libs';
....
针对上面的代码,ESLint会报如下错误
1:10 error UpatMemberInforamtion not found in './libs' import/named
但是,如果在libs.js中,以对象的方式导出,那么Airebnb的import/named规则就无能为力了。
const UpdateMemeberInfomation = (info) => { /* 业务代码 */ };
module.exports = {
UpdateMemeberInfomation,
};
读到这里,我想你已经知道了该如何调整代码以利用Airbnb的配置检查带来的好处。
是的,在模块中直接导出你要导出的对象。
export const UpdateMemeberInfomation = (info)=>{ /* 业务代码 */ };
export const GetMemberInforamtion = (id)=>{ /* 业务代码 */ };
对没有定义而使用的变量报错
大家都知道,在Javascript的严格模式下,使用没有定义的变量或对象是要报错的,没有人会故意这么做。
这种错误的发生通常在重构代码或者键盘敲击上。
const UpdateMemberInfo = ()=>{ /* 业务代码 */};
const clickHandler = () =>{
updateMemberInfo();
/* 其它业务代码 */
};
对于上面的代码,ESLint会报错告诉我们哪一行代码中使用了没有被定义的变量,从而让我们在运行代码之前就发现问题。
(对于全局变量,可以将其添加到.eslintrc文件中)
小结
只有持续重构和优化代码才能将代码逐渐变得强壮,而“重构”和“优化”中却包含着打破原有代码完整性的风险,上面的两条Airbnb规则在很大程度上帮我们规避了这个风险,从而保证了模块间名称引用的完整性和模块内部名称使用的完整性。
有了ESLint的Airbnb配置规则的保驾护航,我们就可以将代码的持续重构和优化变成常态。从而让我们编写的Javascript变得更加强壮。
Airebnb规则安装配置及使用
1. 安装ESLint
ESLint我个人推荐安装在本地,然后从本地进行配置,这样不会造成后面的库可能不匹配问题
npm install --save-dev eslint
2. 通过ESLint进行配置。
node_modules/.bin/eslint --init
3. 在shell的交互模式下,我的选择如下。
> To check syntax, find problems, and enforce code style
> Javascript modules (import/export)
> React
> N
> Browser
> Use a popular style guide
> Airbnb: https://github.com/airbnb/javascript
> JavaScript
之后,ESLint会完成相关库的下载。
最后,打开项目的package.json文件,在scripts节点下添加命令。
"lint": "./node_modules/.bin/eslint --fix --fix-type suggestion,layout,problem ."
然后运行命令进行代码检查,代码格式问题ESLint会帮你修复。
npm run lint
后面在使用过程中你可能会想跳过某些文件的检查,或者调整某些规则的报警级别,这些需求可以通过修改.eslintignore, .eslintrc.js完成。