2-1 Lint JavaScript by configuring and running ESLint

Lint JavaScript by configuring and running ESLint

The static code analysis and linting tool ESLint is the de-facto standard for linting JavaScript projects. In this lesson we’ll see how to install, run, and configure it for your preferences.

Code

Transcript

Here I have a simple project with a couple of bugs in this example. I'm using typeof improperly. I've got a very subtle bug right here. I'm messing up this string interpolation, not using a template literal string.

example.js

const name = 'Freddy'
typeof name === 'string'

if (!'serviceWorker' in navigator) {
  // you have an old browser :-(
}

const greeting = 'hello'
console.log('${greeting} world!')

[(1, 2, 3)].forEach(x => console.log(x))

I'm going to use eslit to make sure that I avoid these problems. I'm going to go ahead and npm install --save-dev eslint.

Terminal Input

npm install --save-dev eslint

With that installed, if I check out my package.json, I'll see that that's in my devDependencies. I can configure eslint. There are various ways to do this. I'm going to use .eslintrc. This is a JSON file where I can configure eslint.

The first thing I need to configure is the version of JavaScript that I want it to be checking. I'm going to say parserOptions, and my ecmaVersion is 2018, "ecmaVersion": "2018". I'm writing the latest version of JavaScript. Then I can specify some rules.

.eslintrc

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "rules": {

  }
}

One rule that I'm particularly interested in right now is the typeof, to make sure that I don't have a typo when I'm checking the typeof something. Let's go ahead and add "valid-typeof": "error". That's one of the built-in rules in eslint.

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "rules": {
    "valid-typeof": "error"
  }
}

Now with that set, I can run npx eslint on my source directory, src, and I'll get an error for that particular rule. This error is actually going to fail my build if I were to put this eslint script into my build.

Terminal Input

npx eslint src

If I didn't want this particular rule to fail my build, then instead of error, I could say warn.

.eslintrc

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "rules": {
    "valid-typeof": "warn"
  }
}

Then if I run eslint again, I'm going to get a warning for that same rule failure. This will not fail my build, but it will let me know that there is a problem there. I can also disable this rule entirely by adding off. Now if I run eslint, it's not going to give me any output.

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "rules": {
    "valid-typeof": "off"
  }
}

Another option that I have here is I can extend, add an extends property here. There are a lot of different configurations that I can install. There's a built-in configuration called eslint:recommended. With that, I can run npx eslint src and I get a whole bunch of errors here in the Terminal.

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "extends": [
    "eslint:recommended"
  ],
  "rules": {
    "valid-typeof": "error"
  }
}

Then I can go into my example.js. I can fix each one of these to avoid the problems these eslint rules were written for. To save us some time, I'm going to go ahead and just paste in the fixed code. With that code fixed, now I can run npx eslint src. I'm getting a couple other errors that I'm going to configure eslint to avoid.

image

Next, we're going to go to our .eslintrc file and we're going to set the environment, "env", for our code as "browser": true. Now if I run this again, I'm going to just see unexpected console statement. If I want to keep those there, then I can say "no-console": "off". I'm going to remove valid-typeof because we're going to get a good configuration from the eslint recommended configuration.

.eslintrc

{
  "parserOptions": {
    "ecmaVersion": "2018"
  },
  "extends": [
    "eslint:recommended"
  ],
  "rules": {
    "no-console": "off"
  },
  "env": {
      "browser": true
  }
}

With that, I can now run npx eslint src and everything is working.

Terminal Input

npx eslint src

Let's go ahead and add this to our script so we don't have to run npx every time. We'll go to package.json to our scripts. We'll add a "lint: "eslint src".

package.json

"scripts": {
    "lint": "eslint src"
},

Now we can run npm run lint.

Terminal Input

npm run lint

In review, all we had to do here was install eslint as a dev dependency. We also added a script in our package.json for linting the src directory. Then we configured eslint in our .eslintrc, first specifying the version of JavaScript that we're going to be writing.

We also specified some custom rules, the environment that our JavaScript is going to be running in so it would know what global variables are available, and a configuration that we want to extend.

I'm going to do one more thing, and that is with most modern editors there is an eslint plugin that you can use. I'm going to go search for eslint in the extensions for VS Code here. I already have it installed. I'll just enable it.

Then I'll reload my editor. Now if I go to thatexample.js file and I make some sort of error, like change this to a regular string, I'm going to see an error here without having to run the eslint script in the terminal. This helps me have a much faster feedback loop as I'm editing the code.

image

项目地址

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

推荐阅读更多精彩内容