ESLint和Prettier的初学者指南

来源:https://randyperez.tech/blog/prettier-eslint

当我开始使用现代JavaScript时,我很快就遇到了一些同事和视频教程,他们使用文本编辑器突出显示语法错误,并在每次保存时神奇地格式化代码。我是嫉妒;我想马上得到它!经过几个问题和快速谷歌搜索,很明显我必须安装ESLint和Prettier。

我有这个!它只是一个快速的npm安装eslint,我的代码看起来就像Dennis Ritchie写的一样。你猜怎么着?什么也没发生!只是我发现自己充满了毫无意义的问题。全局安装还是本地安装?配置文件?漂亮和ESLint在打架吗?为什么VSCode什么都不做?让我们通过设置这些工具的步骤来尝试回答这个问题和其他一些问题。

一、Linting VS Formatting格式化

我在这方面很困惑;我不知道这些东西是来自ESLint还是Prettier。是的,当然,一个“lint”和另一个“格式化”我的代码,但这不是一样的事情吗?不完全是,即使我想做同样的时间。

Linting是一种静态代码分析(不由浏览器编译或解释),目的是在常见错误发生时立即找到它们。例如,假设我们在声明变量之前使用了一个变量,或者当我们想要使用严格的相等(===)时,代码中有一个双等号(==),那么linter就会报错。这比让测试人员或最终用户发现要好得多。值得注意的是,lint还可以警告我们一些样式违反,比如代码行的最大字符数。

格式化严格关注代码的外观。它允许开发人员设置代码样式约定,并让工具处理任何违反。格式化工具可以修复诸如分号、方括号位置、悬空逗号等问题。严格关注代码的外观。它允许开发人员设置代码样式约定,并让工具处理任何违反。格式化工具可以修复诸如分号、方括号位置、悬空逗号等问题。

在格式化和Linting 之间有重叠;不正确的配置可能导致工具之间的规则冲突。简而言之,Linting 关注代码质量和一些样式规则,而格式化则关注代码的样式。

让我们看看JavaScript开发人员用于完成这些任务的特定工具。

二、ESLint

根据ESLint的网站:“是一个用于识别和报告ECMAScript/JavaScript代码中发现的模式的工具,其目标是使代码更加一致并避免bug”。

安装

你可以将ESLint作为单个项目的一部分安装,也可以作为一个全局工具安装在所有项目中。如果有一个全局和本地实例可用,则本地实例优先。我倾向于在全局范围内建立快速原型,并在当地建立长期项目。这种设置允许在任何地方都可以使用一组基本规则,并允许在每个项目的目录中使用更具体的规则。它有一个一步安装:

$ npm install -g eslint # global installation

$ npm install eslint --save-dev # local installation

配置文件

我最喜欢的部分是ESLint预加载了一组很好的规则,这些规则可以用广泛接受的最佳实践开箱即用地改进你的代码。这只是冰山一角,因为我们可以定义自己的一套规则,或者使用第三方如谷歌和Airbnb提供的规则。

所有的配置都在.eslintrc文件中。要在项目中包含一个,运行init脚本,然后将提示您回答几个问题,这些问题将有助于创建该文件。

$ ./node_modules/.bin/eslint --init # for local installations

$ eslint --init # for global installations

你的配置文件可能会以这样的方式结束:

{

  "env": {

    "browser": true

  },

  "extends": "eslint:recommended",

  "rules": {

    "default-case": "error"

  }

}

关于如何配置ESLint及其规则的更多信息,请点击这里。

Linting文件

要" lint "你的文件,你必须使用" eslint "命令作为参数传递文件:

// very complex code we want to check(anyFileName.js)

var x = 1;

if (!!x) console.log('hi');

$ ./node_modules/.bin/eslint anyFileName.js # for local installations

$  eslint anyFileName.js # for global installations

如果一切正常,将不会有输出,但如果有任何违反,我们的输出将类似于:

我们得到我们要打破的规则的名称和位置。如果我们需要更多的上下文来理解ESLint在说什么,他们的网站上有一个详细的规则页面,提供了这一点。例如,我在第3行有一个“重复的双重否定”。

修复错误

在大多数情况下,当ESLint遇到我们可以手动修复的错误时,它会警告我们。然而,当我们包含“-fix”标志时,我们的linter可以自动修复一些问题。如果你还记得前一节,我们有一个(冗余的双重否定),所以让我们修复它:

$ ./node_modules/.bin/eslint anyFileName.js --fix# for local installations

$ eslint anyFileName.js --fix# for global installations

// Fixed code.

var x=1;

if (x) console.log('hi');

这是一个方便的特性,但是它不能修复大多数错误。为了提供更全面的修正,ESLint必须对我们的代码做出广泛的假设,同时冒着引入新错误的风险。或者换句话说,保持您对这个特性的期望。

使它容易

添加带有lint命令的脚本是改进开发人员和自动化系统与ESLint交互的好方法。让我们通过在package.json的scripts部分中包含它来做到这一点:

"scripts": {

    "lint": "eslint './*.js'",

    "lint:fix": "eslint './*.js' --fix"

  }

注意我们是如何将正则表达式传递给eslint命令的,这将获取根目录下的所有.js文件。最后,运行我们的文件:

$ npm run lint # just lint

$ npm run lint:fix  # lint and fix

太棒了!对吧?但还有更多。我喜欢ESLint与文本编辑器集成的方式,比如VSCode,当你输入时可以在后台无缝运行。有所有主要玩家的扩展,如VSCode, Sublime和Atom。安装后,您的编辑器将突出显示违反规则的情况,现在您再也不必键入该命令(我希望如此)。

三、Prettier

prettier的网站将其描述为一个固执己见的代码格式化程序,我可以告诉你,它确实是。它剥离所有原始风格的代码,并按照其配置重新打印。因为Prettier会重写我们的代码,所以它可以安全地删除任何不需要的格式,从而保证整个项目的样式一致。

安装

就像ESLint一样,我们可以有一个全局或本地安装:

$ npm install prettier --save-dev # local

$ npm install -g prettier # globally

配置

还记得固执己见的部分吗?这意味着Prettier做出了一些我们无法配置的样式决定。他们想要实现的是缩短关于样式的讨论,而这些样式在生产力和已发布的特性方面毫无用处。不过,我们可以使用命令行或.prettierrc配置文件更改一些选项。让我们重写一些默认值:

/ prettierrc.js (we can also use a JavaScript file.)

module.exports = {

  trailingComma: 'es5', // add a trailing command if still valid es5 code

  tabWidth: 3, // tab will be = 3 spaces. </3

  semi: false, // no semi colons

  singleQuote: true, // always use single quotes

};

是时候变漂亮了

我们可以使用命令行工具格式化文件;有几个可用于修改默认行为的标志。以下是一些最常见的用例:

# To use local installation replace "prettier" for "./node_modules/.bin/prettier"

$ prettier anyFileName.js # Prints formatted file in the console

$ prettier --check anyFileName.js # Checks if file is formatted properly

$ prettier --write anyFileName.js # Formats the file if necessary

使它容易

一直运行该命令可能会很痛苦,因此我们希望编辑器来做这些繁重的工作。有两种可能的,但不是相互排斥的选项:允许编辑器每次保存文件时格式化文件,并在预提交钩子上运行得更漂亮(我将在以后的博文中介绍)。

为了将Prettier集成到文本编辑器中,我们需要安装适当的插件。我们将介绍VSCode,但是对于大多数编辑器,如VIM, Atom和Sublime,有一些选项可用。

首先,让我们打开VSCode并安装市场上的Prettier扩展。最后,我们需要通过在设置中包含以下内容来设置编辑器在每次保存时格式化文件:

{

  // Turns off formatOnSave. Just to be safe.

  "editor.formatOnSave": false,

  // Enable per-language

  "[javascript]": {

    "editor.formatOnSave": true

  }

}

这是它!每次我们点击保存时,代码都会使用Prettier来格式化文件。

一起工作:ESLint + Prettier

当ESLint和Prettier在同一个项目中处于活动状态时,它们可能会有潜在的规则冲突。这种情况导致了一个主要的头痛,因为pretty会以ESLint认为有错误的方式格式化我们的代码。例如,在每次保存之后,Prettier会删除分号,但是这会对当前的lint配置产生一个错误。我们希望避免世界末日的情景。

这就是eslint-config-prettier发挥作用的地方。它通过关闭所有的ESLint规则来工作,而这些ESLint规则是prettier已经在处理的,或者换句话说,如果prettier会修复它,为什么要对其进行lint ?让我们安装它:

# In the command line

$ npm install --save-dev eslint-config-prettier

// Add prettier to our .eslintrc.json file

{

  "env": {

    "browser": true

  },

  "extends": ["eslint:recommended", "prettier"],

  "rules": {

    "default-case": "error"

  }

}

就是这样!他们现在是朋友了!如果您想了解这个插件提供的额外选项,请查看它们的文档。

结论与未来工作

现在我们已经安装了ESLint和Prettier,这是改善任何JavaScript工作流程的关键一步。它们节省了时间,防止了无数错误,使程序员的生活更轻松。

在这篇文章的第二部分,我们将探索使用git钩子来合并linting和格式化,以避免将未处理的代码提交到我们的存储库。请继续关注!


https://itnext.io/getting-started-with-javascript-linting-804433fc06dc

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

推荐阅读更多精彩内容