在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier

摘要:
单元exports={root:env:{node:extensions:['plugin:'eslint:parser:rules:add.feiderc.jsmodule.exports={printWidth:{“extensions”:“eslint.run”:“files.autoSave”:{“editor.defaultFormatter”:

在接手一些老项目的时候,最让人头疼的就是代码格式化不统一的问题,控制台满屏 eslint 警告,简直是要逼死强迫症的节奏。

如果是开启一个新的Vue项目,我一定会选用 Vue Cli + TypeScript + ESLint + Prettier 的组合,这个配置有以下好处:

  • TypeScript 使我们的代码更规范
  • ESLint + Prettier 可以统一团队代码格式化,并且保存时自动进行格式修正

代码地址

vue-ts

创建新项目

vue create vue-ts
在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier第1张在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier第2张在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier第3张

注意这里需要勾选 ESLint + Prettier,我试过勾选 TSLint,但是发现 TSLint 无法实现代码自动格式化,只能提供很多很多的警告信息。

后面要选择 Lint on save 和 In decicated config files

image-20200410153817662

修改.eslintrc.js

规则可以自己配置,我主要修改了extends:

  • @typescript-eslint/parserESLint的解析器,用于解析TypeScript,从而检查和规范TypeScript代码。
  • @vue/prettier/@typescript-eslint:使得@typescript-eslint中的样式规范失效,遵循prettier中的样式规范,需要放在最后一项。
  • extends:代表你启动哪些lint选项,如果多个规则直接有冲突的话,extends后面的选项会覆盖前面的。
module.exports = {
  root: true,
  env: {
    node: true
  },
  extends: [
    'plugin:vue/essential',
    '@vue/prettier',
    'eslint:recommended',
    '@vue/typescript/recommended',
    '@vue/prettier/@typescript-eslint'
  ],
  parserOptions: {
    ecmaVersion: 2020,
    parser: "@typescript-eslint/parser"
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    "no-unused-vars": "off",
    "@typescript-eslint/no-unused-vars": "off",
    "@typescript-eslint/no-explicit-any": "off",
    "prefer-const": 'off'
  }
};

在根目录添加 .prettierrc.js

module.exports = {
  printWidth: 80,
  tabWidth: 2,
  useTabs: false,
  singleQuote: true,
  semi: true,
  trailingComma: 'none',
  bracketSpacing: true,
  jsxBracketSameLine: true
};

然后启动/重启项目,就可以在保存代码时按照你项目里配置的格式化规则进行自动格式化了。

附上我的 vscode 配置

    {
	"prettier.semi": false,
	"prettier.jsxSingleQuote": true,
	"prettier.singleQuote": true,
	"prettier.proseWrap": "never",
	"prettier.printWidth": 180,
	"html.format.maxPreserveNewLines": 1,
	"html.format.wrapAttributes": "force",
	"prettier.eslintIntegration": true,
	"prettier.jsxBracketSameLine": true,
	"[javascript]": {
		"editor.defaultFormatter": "vscode.typescript-language-features"
	},
	"editor.tabSize": 2,
	"prettier.useTabs": true,
	"eslint.options": {
		"extensions": [".js", ".vue", ".ts", ".tsx"]
	},
	"[jsonc]": {
		"editor.defaultFormatter": "esbenp.prettier-vscode"
	},
	"eslint.run": "onSave",
	"javascript.validate.enable": false,
	"editor.wordWrap": "wordWrapColumn",
	"files.autoSave": "afterDelay",
	"[vue]": {
		"editor.defaultFormatter": "esbenp.prettier-vscode"
	},
	"editor.codeActionsOnSave": {
		"source.fixAll.eslint": true
	},
	"[typescript]": {
		"editor.defaultFormatter": "vscode.typescript-language-features"
	},
	"tslint.run": "onSave",
	"eslint.format.enable": true,
	"vetur.format.defaultFormatter.html": "prettyhtml",
	"vetur.format.defaultFormatter.js": "prettier",
	"vetur.format.defaultFormatterOptions": {
		"prettier": {
			"singleQuote": true,
			"semi": false,
			"eslintIntegration": true
		}
	},
	"javascript.implicitProjectConfig.checkJs": true,
    }

免责声明:文章转载自《在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js 判断 是否在当前页面C#坐标系下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

layui中,同一个页面动态加载table数据表格

效果图: 前端代码: <div class="layui-fluid" id="record-user" hidden="hidden"> <div class="layui-card"> <div class="layui-form" lay-filter="datafile">...

Electron win10命令行调用与系统级别右键菜单项的实现

我们在使用一些Electron开发的应用程序的时候,可以发现有些程序是可以通过命令行或者右键菜单唤起的。比如VSCodePicGo 那这个要怎么实现呢? 这里只实现win 平台,其他平台参考: https://juejin.cn/post/6844903824709140488#heading-2 项目初始化 Electron 项目初始化很简单,这里不做赘...

GSYVideoPlayer 视频播放库

01. 优先介绍一下模拟器中没有声音的问题: 官方Demo中的内容较多,我这边按照自己的需求,做了个小DEMO,便于后期引用学习 ----------------------------------------- 02. 依赖配置       1 //视频播放 2 implementation 'com.shuyu:GSYVideoPla...

AutoCAD中的Deep Clone

AutoCAD中的Deep Clone 所谓Deep clone是指将实体从一个dwg文件拷贝至另一个dwg文件,类似于Ctr+C,CtrV,而普通的实体的Copy()方法,是在单个dwg文件中输入命令'copy', 在Pycomcad中,实现deep colone是通过Document的CopyObjects方法实现的,语法如下: Retval=obj....

Unity IOS Build的Graphics API最好是固定Opengl ES 2.0

不要选择Automatic也不要选择Metal,因为这个选项可能会导致app在Iphone6上出现crash。 一个类似的crash堆栈: http://stackoverflow.com/questions/31803907/finding-cause-of-crash-sigabrt Exception Type: EXC_CRASH (SIGABR...

koa和egg项目webpack热更新实现

背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack-hot-middleware 和 koa-webpack-dev-middleware 封装好的组件支持. 不过这里如果需要支持Node.js服务器端修改代码...