5-6~7 eslint 在 webpack 中的配置

1. 简介

eslint 是一个开源的 js 代码检查工具,初衷是为了让程序员可以创建自己的检测规则。实际生产中,团队内往往会制订一套统一的标准,让整个团队的编码风格达到一致。
eslint 其实与 webpack 没有任何关系,两者并不互相依赖,甚至一般情况下我们并不会在 webpack 中进行 eslint 的配置。这里我们主要是介绍一下 eslint 是如何进行配置和使用的。

2. eslint 配置

首先安装 eslint:

npm i eslint -D

然后利用命令初始化一个配置文件:

npx eslint --init

选择如下:


image.png

然后选择自动安装依赖,可以看到项目里面面为我们自动生成了配置文件,.eslintrc.js:

module.exports = {
  env: {
    browser: true,
    es6: true,
  },
  extends: [
    'plugin:react/recommended',
    'airbnb',
  ],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 2018,
    sourceType: 'module',
  },
  plugins: [
    'react',
  ],
  rules: {
  },
};

我们来看一下Eslint 配置,其中所代表的含义:

  1. env
    指定脚本的运行环境。每种环境都有一组特定的预定义全局变量。此处使用的 browser 预定义了浏览器环境中的全局变量,es6 启用除了 modules 以外的所有 ECMAScript 6 特性(该选项会自动设置 ecmaVersion 解析器选项为 6)。
  2. globals
    脚本在执行期间访问的额外的全局变量。也就是 env 中未预定义,但我们又需要使用的全局变量。
  3. extends
    检测中使用的预定义的规则集合。
  4. rules
    启用的规则及其各自的错误级别,会合并 extends 中的同名规则,定义冲突时优先级更高。
  5. parserOptions
    ESLint 允许你指定你想要支持的 JavaScript 语言选项。ecmaFeatures 是个对象,表示你想使用的额外的语言特性,这里 jsx 代表启用 JSX。ecmaVersion 用来指定支持的 ECMAScript 版本 。默认为 5,即仅支持 es5,你可以使用 6、7、8、9 或 10 来指定你想要使用的 ECMAScript 版本。你也可以用使用年份命名的版本号指定为 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)或 2019 (same as 10)。上面的 env 中启用了 es6,自动设置了ecmaVersion 解析器选项为 6。
  6. plugins
    plugins 是一个 npm 包,通常输出 eslint 内部未定义的规则实现。rules 和 extends 中定义的规则,并不都在 eslint 内部中有实现。比如 extends 中的plugin:react/recommended,其中定义了规则开关和等级,但是这些规则如何生效的逻辑是在其对应的插件 ‘react’ 中实现的。

3. 运行 eslint

npx eslint src/**/*.jsx
image.png

可以看到,为我们报了许多告警。可是我们修复的时候,每次修复一下,得运行验证一遍,修复下一个时候又要来回切换,验证,真的很繁琐。所以我们一般会使用 ide 来进行提示。这里我以 webstorm 为例吧,其实 vscode 这些也都差不多。


image.png

如图,进行配置后。我们直接在编辑界面就可以看到报错提示。


image.png

这样改起来就方便了许多。

4. 结合 webpack 使用

不一定每个 ide 都有插件,如果不想使用插件,又要实时提示报错,我们可以结合 webpack 的打包编译功能来实现。

// webpack.config.common.js
...
          {
                test: /\.(js|jsx)$/,
                exclude: /node-modules/,
                use: ['babel-loader', 'eslint-loader']
            },
...

然后使用 npm run dev-server 打包,发现命令行会显示告警,修复后,重新编译,会显示剩余的告警。这样还是要去查看命令行。我们可以在 webapck
的 devserver 下加一个配置参数:

overlay: true,

再次打包,如图:


image.png

会弹一个浮层来显示告警,只有当所有告警信息修复完毕后,才会显示正常的页面信息。

5. husky

真实项目中,很少有使用 eslint-loader 的,因为不可避免会降低打包速度。事实上,我们只要保证每个人提交的代码是符合要求即可,为了实现这个目的,我们只需要在开发者上传代码时进行校验即可。提交前的代码质量由开发者自行安装插件来保证。
我们常用 husky 和 lint-staged 来进行代码提交时的 eslint 校验:

// package.json
"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/**/*.{js,jsx}": [
      "eslint"
    ]
  },

提交 commit 时,会对我们本次 commit 修改涉及到的文件进行 eslint 校验,如果有报错,则不允许 commit。

参考

https://eslint.bootcss.com/docs/about/
https://eslint.bootcss.com/docs/user-guide/getting-started
https://github.com/webpack-contrib/eslint-loader
https://eslint.bootcss.com/docs/user-guide/configuring
vscode安装和配置ESLint
https://www.npmjs.com/package/husky
https://www.npmjs.com/package/lint-staged

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341