ts项目从零配置eslint + prettier

本篇文章介绍自己搭建的ts项目如何在不依赖脚手架的情况下配置eslint + prettier

配置eslint

文件创建

先在项目的根目录上创建 .eslintrc.json 文件或者 .eslintrc.js 用来编写eslint配置,一个是json格式,一个需要 module.export 导出js配置,这里我选择.eslintrc.json 文件。

再创建 .eslintignore 文件, 指定忽略哪些文件的校验
创建完 .eslintrc.json 文件先放着,在 .eslintignore 文件填写上忽略的文件:

image.png

依赖安装

  1. 安装eslint:
npm install eslint -D
  1. 安装esllint ts的解析器
npm install @typescript-eslint/parser -D

这个解析器是eslint解析语法的基础,也就是eslint配置文件parser属性填写的字段,除了这个ts解析器,eslint常见的解析器还有:

espree  //  eslint默认自带的解析器,识别不了比较新的js语法
@babel/eslint-parser // 需要安装,能够解析比较新的js语法
  1. 安装js代码规范
    引入业内大家普通使用的、遵循的编码规范,添加到eslint配置文件中的extends属性,该属性表示集成外部安装的一些规范,不用自己一条条手写rules配置,比如不用分号,引号用单引号,不能存在空函数,必须全等等规则。
    这里选择安装standard的js规范,这个也是vue脚手架初始化时,我们选择eslint规则选择standard的时候所安装的规范。
npm install eslint-config-standard -D

使用这个规范还需要再安装三个补丁包:

npm install eslint-plugin-import eslint-plugin-node eslint-plugin-promise -D
  1. 安装ts语法规范
    上面所安装的都是基础的js语法规范,一些ts独有的语法,比如interface、type等语法无法进行校验,所以需要再安装ts语法的检测规范,这里安装eslint官方的ts规则
npm install @typescript-eslint/eslint-plugin -D
  1. 包版本
    因为eslint以及相关的包的版本一直在更新,很容易出现不兼容部分包报错的情况,这里我贴一下我的包的版本,如果你安装完后eslint报错不生效,可以指定成我提供的版本号,重新安装:
  "@typescript-eslint/eslint-plugin": "^5.26.0",
  "@typescript-eslint/parser": "^5.26.0",
  "eslint": "^7.12.1",
  "eslint-config-standard": "^16.0.3",
  "eslint-plugin-import": "^2.26.0",
  "eslint-plugin-node": "^11.1.0",
  "eslint-plugin-promise": "^4.2.1"

编写配置文件

上面已经将eslint检测ts文件的插件都安装完毕,下面编写.eslintrc.json 文件:
.eslintrc.json

{
  "parser": "@typescript-eslint/parser", // 解析器
  
  "env": {
    "node": true,
    "es6": true
  },
  
  "parserOptions": {
    "ecmaVersion": 2020, // 指定js版本
    "sourceType": "module" // 默认为script,使用es6 module设置为module
  },
  
  "extends": [ // 集成的代码规范
      "eslint-config-standard",
      "plugin:@typescript-eslint/recommended"
   ],
   
  "plugins": [], // 插件
  
  "rules": {
      // 单独配置规则,会覆盖extends的规则
  }
}

这就是基础的ts项目的eslint文件配置,关于 env 可以参考官方:https://eslint.org/docs/user-guide/configuring/language-options#specifying-environments,我这里的demo为node项目,不在浏览器运行。

vscode安装插件实现保存自动修复

vscode安装eslint插件:


image.png

然后在settings.json中添加配置:

  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true // 每次保存的时候将代码按eslint格式进行修复
  }

js、ts文件eslint已经自动检测,如果你的文件没有检测生效,可以添加:

  "eslint.validate": [
      {
        "language": "typescript",
        "autoFix": true
      }
  ]

检查是否检测生效

上面的准备工作完成后,打开vscode的输出面板,选择到eslint拓展:


image.png

如上图eslint已经成功运行,并在检测

效果

保存前:

image.png

保存后:
image.png

可以看到规则已生效,引入必须在文件的最前面,变量无修改优先使用const,操作符两边有空格等,目前还存在警告,表示引入了未使用,如果不想出现警告,可以到 .eslintrc.json 文件的 rules 属性中添加规则

配置prettier

eslint侧重于代码质量,规范一些语法的东西,比如变量名不能用下划线、ts不能用any、模块引入必须使用等。prettier则只管代码风格,比如一行不能超过多少个字符、行尾逗号、双引号单引号统一等。

安装以及配置文件

安装prettier插件:

npm install prettier -D

项目根目录创建编写prettier文件,可支持js、json、yaml等,这里我创建.prettierrc.js文件

module.exports = {
  endOfLine: 'auto',
  printWidth: 80,                    //(默认值)单行代码超出 80 个字符自动换行
  tabWidth: 2,                       //(默认值)一个 tab 键缩进相当于 2 个空格
  useTabs: true,                     // 行缩进不使用 tab 键代替空格
  semi: false,                       //(默认值)禁止语句的末尾加上分号
  singleQuote: true,                 // 使用单引号
  quoteProps: 'as-needed',           //(默认值)仅仅当必须的时候才会加上双引号
  jsxSingleQuote: true,              // 在 JSX 中使用单引号
  trailingComma: 'none',              // 不用在多行的逗号分隔的句法结构的最后一行的末尾加上逗号
  bracketSpacing: true,              //(默认值)在括号和对象的文字之间加上一个空格
  jsxBracketSameLine: true,          // 把 > 符号放在多行的 JSX 元素的最后一行
  arrowParens: 'avoid',              // 当箭头函数中只有一个参数的时候可以忽略括弧
  vueIndentScriptAndStyle: false,    //(默认值)对于 .vue 文件,不缩进 <script> 和 <style> 里的内容
  embeddedLanguageFormatting: 'off' // 不允许格式化内嵌的代码块,比如 markdown  文件里的代码块
};

这里的配置是copy官方的默认配置项,对于单纯的ts项目有些并无用到。

关于endOfLine,建议设置auto就行了。

每次修改prettier配置项需要重新打开vscode才会生效

eslint集成prettier

首先需要安装相关的包:

npm install prettier-eslint eslint-plugin-prettier eslint-config-prettier -D

然后改造 .eslintrc.json 文件:

{
  "parser": "@typescript-eslint/parser",
  "env": {
    "node": true,
    "es6": true
  },
  "parserOptions": {
    "ecmaVersion": 2020,
    "sourceType": "module"
  },
  "extends": [
    "eslint-config-standard",
    "plugin:@typescript-eslint/recommended", // 使用@typescript-eslint/eslint-plugin的推荐规则
    "prettier" // 放在最后
  ],
  "plugins": ["prettier"],  // 集成prettier
  "rules": {
    "prettier/prettier": "error" // 对于不符合prettier报eslint错误
  }
}

到这里就集成完毕,同样可能会出现包版本不同造成的错误,这里我同样贴一下包的版本,大家可以选择与我相同的版本进行使用:

"prettier": "^2.6.2",
"prettier-eslint": "^15.0.1",
"eslint-plugin-prettier": "^4.0.0",
"eslint-config-prettier": "^8.5.0"

效果

保存前:


image.png

保存后:


image.png

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

推荐阅读更多精彩内容