1:全局安装eslint

`npm install -g eslint`
2: 打开vscode 点击 “文件”-----》“首选项”----》“设置”,在右侧“用户设置/settings.json”里加入一下配置:

```
{
//eslint 代码自动检查相关配置

"eslint.enable": true,
"eslint.autoFixOnSave": true,
"eslint.run": "onType",
"eslint.options": {
"extensions": [".js",".vue"]
},
"eslint.validate": [
"javascriptreact",
"vue",
"javascript", {
"language": "vue",
"autoFix": true
},
"html", {
"language": "html",
"autoFix": true
}
],
}
```
## 下面是我的配置:

```
{
"team.showWelcomeMessage": false,
"window.zoomLevel": 1,
//eslint 代码自动检查相关配置
"eslint.enable": true,
"eslint.autoFixOnSave": true,
"eslint.run": "onType",
"eslint.options": {
"extensions": [".js",".vue"]
},
"eslint.validate": [
"javascriptreact",
"vue",
"javascript", {
"language": "vue",
"autoFix": true
},
"html", {
"language": "html",
"autoFix": true
}
],
"explorer.confirmDelete": false,
"files.associations": {
"*.cjson": "jsonc",
"*.wxss": "css",
"*.wxs": "javascript"
},
"emmet.includeLanguages": {
"wxml": "html"
},
"minapp-vscode.disableAutoConfig": true,
"window.menuBarVisibility": "visible",
"git.enableSmartCommit": true,
"git.autofetch": true,
"liveServer.settings.donotShowInfoMsg": true,
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"javascript.updateImportsOnFileMove.enabled": "always",
"workbench.iconTheme": "material-icon-theme",
"workbench.colorTheme": "SynthWave '84",
"editor.fontSize": 16,
"search.followSymlinks": false,
"workbench.sideBar.location": "right",
"vscode_custom_css.policy": true,
"vscode_custom_css.imports":[
"file:///C:/Users/wongseedling/Desktop/vscode-transparent-glow/synthwave84.css",
"file:///C:/Users/wongseedling/Desktop/vscode-transparent-glow/toolbar.css",
"file:///C:/Users/wongseedling/Desktop/vscode-transparent-glow/vscode-vibrancy-style.css",
"file:///C:/Users/wongseedling/Desktop/vscode-transparent-glow/enable-electron-vibrancy.js",
],
"zenMode.restore": true,
"glassit.alpha": 220,
"breadcrumbs.enabled": true,
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
}
```
# 以上可以安装eslint 插件加上面配置即可,有兴趣的话你可以往下面看
# “编码一时爽,重构火葬场。”
实践
如何上手?首先还是官方文档。我觉得不论是学什么,你得先去了解它是什么,以及它为什么出现,然后才是衡量是否要在工作或生活中使用它。

官方文档:https://eslint.org/

中文文档:https://cn.eslint.org/
ESLint它很灵活,所有的检查都是基于规则的。

ESLint规则:https://cn.eslint.org/docs/rules/

使用ESLint三部曲
安装
npm install -g eslint
初始化
npm init
编写配置文件(由于ESLint配置文件支持多种文件扩展,此处以.eslintrc.js为例)

```
module.exports = {
/**
* 默认情况下,ESLint会在所有父级目录里寻找配置文件,一直到根目录。
* 为了将ESLint限制在一个特定的项目,设置root: true;
* ESLint一旦发现配置文件中有 root: true,就会停止在父级目录中寻找。
*/
root: true,
// 指定解析器
// babel-ESLint: 一个对Babel解析器的包装,使其能够与ESLint兼容。
// parser: 'babel-eslint',
// 设置解析器能帮助ESLint确定什么是解析错误。
parserOptions: {
parser: 'babel-eslint',
// 指定js版本。语法上的支持
ecmaVersion: 6
},
// 脚本在执行期间访问的额外的全局变量
// globals: {},
// env: 指定脚本的运行环境
env: {
// 一个环境定义了一组预定义的全局变量。
browser: true,
// 会自动开启es6语法支持。
es6: true,
node: true
},
// 使用第三方插件。全局安装的 ESLint 实例只能使用全局安装的ESLint插件。本地同理,不支持混用。
plugins: [
'html',
'vue'
],
// 配置文件从基础配置中继承已启用的规则。
/**
* eslint:recommended 启用核心规则,在规则页面中被标记为 √ 的。
*/
extends: [
// plugin:(此处不能有空格)包名/配置名称。解析时plugin是解析成 eslint-plugin-vue。如果有空格会解析失败,eslint-plugin- vue。
// plugin可以省略包名的前缀 eslint-plugin-
// 'plugin:vue/essential',
// '@vue/standard',
'eslint:recommended'
// 也可以指定另一个基本配置文件的绝对路径或相对路径
],

/**
* 每个规则有【3】个错误级别。
* off或0: 关闭该规则;
* warn或1: 开启规则,使用警告级别的错误,不会导致程序退出;
* error或2: 开启规则,使用错误级别的错误,当被触发的时候,程序会退出。
*/
rules: {
/**
* 【================================================ Possible Errors ================================================】
* 这些规则与JavaScript代码中可能的错误或逻辑错误有关。
*/
// 强制"for"循环中更新子句的计算器朝着正确的方向移动
'for-direction': 2,
// 禁止function定义中出现重名参数
'no-dupe-args': 2,
// 禁止对象字面量中出现重复的key
'no-dupe-keys': 2,
// 禁止出现重复的case标签
'no-duplicate-case': 2,
// 禁止对catch子句的参数重新赋值
'no-ex-assign': 2,
// 禁止对关系运算符的左操作数使用否定操作符
'no-unsafe-negation': 2,
// 禁止出现令人困惑的多行表达式
'no-unexpected-multiline': 2,
// 禁止在return、throw、continue、break语句之后出现不可达代码
'no-unreachable': 2,
// 禁止在finally语句块中出现控制流语句
'no-unsafe-finally': 2,
// 要求使用isNaN()检查NaN
'use-isnan': 2,
// 强制typeof表达式与有效的字符串进行比较
'valid-typeof': 2,
// 还可以写表达式,厉害了~
'no-debugger': process.env.NODE_ENV === 'production' ? 'error': 'off',
'no-console': process.env.NODE_ENV === 'production' ? 'error': 'off',

/**
* 【================================================ Best Practices ================================================】
* 这些规则是关于最佳实践的,帮助你避免一些问题。
*/
// 强制 getter 和 setter在对象中成对出现
'accessor-pairs': 2,
// 强制所有控制语句使用一致的括号风格
'curly': [2, 'multi-line'],
// 强制在点号之前和之后一致的换行
'dot-location': [2, 'property'],
// 要求使用 ===和 !==
'eqeqeq': [2, 'allow-null'],
// 禁用arguments.caller 或 arguments.callee
'no-caller': 2,
// 禁止使用空解构模式
'no-empty-pattern': 2,
// 禁止eval()
'no-eval': 2,
// 禁止使用类似eval()的方法
'no-implied-eval': 2,
// 禁止扩展原生类型
'no-extend-native': 2,
// 禁止不必要的.bind()调用
'no-extra-bind': 2,
// 禁止case语句落空
'no-fallthrough': 2,
// 禁止数字字面量中使用前导和末尾小数点
'no-floating-decimal': 2,
// 禁用__iterator__属性
'no-iterator': 2,
// 禁用标签语句
'no-labels': [2, {
'allowLoop' : false,
'allowSwitch': false
}],
// 禁用不必要嵌套块
'no-lone-blocks': 2,
// 禁止使用多个空格
'no-multi-spaces': 2,
// 禁止使用多行字符串
'no-multi-str': 2,
// 禁止对String,Number 和 Boolean 使用new操作符
'no-new-wrappers': 2,
// 禁用八进制字面量
'no-octal': 2,
// 禁止在字符串中使用八进制转义序列
'no-octal-escape': 2,
// 禁止使用__proto__属性
'no-proto': 2,
// 禁止多次声明同一变量
'no-redeclare': 2,
// 禁止在return语句中使用赋值语句
'no-return-assign': [2, 'except-parens'],
// 禁止自我赋值
'no-self-assign': 2,
// 禁止自我比较
'no-self-compare': 2,
// 禁用逗号操作符
'no-sequences': 2,
// 禁止抛出异常字面量
'no-throw-literal': 2,
// 禁止一成不变的循环条件
'no-unmodified-loop-condition': 2,
// 禁止不必要的.call()和.apply()
'no-useless-call': 2,
// 禁止不必要的转义字符
'no-useless-escape': 2,
// 禁用with语句
'no-with': 2,
// 要求IIFE使用括号括起来
'wrap-iife': 2,
// 要求或禁止Yoda条件。 if("red" === color) { //字面量在前,变量在后 }
'yoda': [2, 'never'], // 比较绝不能是Yoda条件(需要变量在前,字面量在后)

/**
* 【================================================ ECMAScript 6 ================================================】
* 这些规则只与ES6有关,即通常所说的ES2015。
*/
// 强制箭头函数前后使用一致的空格
'arrow-spacing': [2, {
'before': true,
'after' : true
}],
// 要求在构造函数中有super()调用
'constructor-super': 2,
// 强制generator函数中*号周围使用一致的空格
'generator-star-spacing': [2, {
'before': true,
'after' : true
}],
// 禁止修改类声明的变量
'no-class-assign': 2,
// 禁止修改const声明的变量
'no-const-assign': 2,
// 禁止类成员中出现重复的名称
'no-dupe-class-members': 2,
// 禁止 Symbolnew 操作符和 new 一起使用
'no-new-symbol': 2,
// 禁止在构造函数中,在调用super()之前使用 this 或 super
'no-this-before-super': 2,
// 禁止在对象中使用不必要的计算属性
'no-useless-computed-key': 2,
// 禁止不必要的构造函数
'no-useless-constructor': 2,
// 禁止模板字符串中嵌入表达式周围空格的使用
'template-curly-spacing': [2, 'never'],
// 强制yield*表达式中的*周围使用空格
'yield-star-spacing': [2, 'both'],
// 要求使用const声明那些声明后不再被修改的变量
'prefer-const': 2,

/**
* 【================================================ Stylistic Issues ================================================】
* 这些规则是关于代码风格的。
*/
// 获取当前执行环境的上下文时,强制使用一致的命名(此处强制使用 'that')。
'consistent-this': [2, 'that'],
// 禁止或强制在代码块中开括号前和闭括号后有空格 { return 11 }
'block-spacing': [2, 'always'],
// 强制在代码块中使用一致的大括号风格
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
// 强制使用驼峰拼写法命名规定
'camelcase': [0, {
'properties': 'always'
}],
// 要求或禁止末尾逗号
'comma-dangle': [2, 'never'],
// 强制在逗号前后使用一致的空格
'comma-spacing': [2, {
'before': false,
'after' : true
}],
// 强制在逗号前后使用一致的空格
'comma-style': [2, 'last'],
// 要求或禁止文件末尾存在空行
'eol-last': 2,
// 强制使用一致的缩进
'indent': [2, 2, {
'SwitchCase': 1
}],
// 强制在JSX属性中一致地使用双引号或单引号
'jsx-quotes': [2, 'prefer-single'],
// 要求构造函数首字母大写
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
// 要求构造无参构造函数时有圆括号
'new-parens': 2,
// 禁用Array构造函数
'no-array-constructor': 2,
// 禁止空格和tab的混合缩进
'no-mixed-spaces-and-tabs': 2,
// 禁止出现多行空行
'no-multiple-empty-lines': [2, {
// 最大连续空行数
max: 2
}],
// 禁止在函数标识符和其调用之间有空格
'func-call-spacing': 2,
// 禁止行尾空格
'no-trailing-spaces': 2,
// 禁止可以在有更简单的可替代的表达式时使用三元操作符
'no-unneeded-ternary': [2, {
// 允许表达式作为默认的赋值模式
'defaultAssignment': true
}],
// 禁止属性前有空白
'no-whitespace-before-property': 2,
// 强制函数中的变量要么一起声明要么分开声明
'one-var': [2, {
'initialized': 'never'
}],
// 强制操作符使用一致的换行符
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
// 要求或禁止块内填充
'padded-blocks': [2, 'never'],
// 强烈使用一致的反勾号``、双引号""或单引号''
'quotes': [2, 'single', {
// 允许字符串使用单引号或者双引号,只要字符串中包含了一个其他引号,否则需要转义
'avoidEscape': true,
// 允许字符串使用反勾号
'allowTemplateLiterals': true
}],
// 禁止使用分号代替ASI(自动分号插入)
'semi': [2, 'never'],
// 强制分号之前和之后使用一致的空格
'semi-spacing': [2, {
'before': false,
'after' : true
}],
// 强制在块之前使用一致的空格
'space-before-blocks': [2, 'always'],
// 强制在圆括号内使用一致的空格
'space-in-parens': [2, 'never'],
// 要求操作符周围有空格
'space-infix-ops': 2,
// 强制在一元操作符前后使用一致的空格
'space-unary-ops': [2, {
'words' : true,
'nonwords': false
}],
// 强制在注释// 或/*使用一致的空格
'spaced-comment': [1, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
// 强制在大括号中使用一致的空格
'object-curly-spacing': [2, 'always', {
'objectsInObjects': false
}],
// 禁止或强制在括号内使用空格
'array-bracket-spacing': [2, 'never'],
// 强制要求在对象字面量的属性中键和值之间使用一致的间距
'key-spacing': [2, {
'beforeColon': false,
'afterColon' : true
}],

/**
* 【================================================ Node.js and CommonJS ================================================】
* 这些规则是关于Node.js 或 在浏览器中使用CommonJS的。
*/
// 要求回调函数中有容错处理
'handle-callback-err': [2, '^(err|error)$'],
// 禁止调用 require 时使用new操作符
'no-new-require': 2,
// 禁止对__dirname和__filename进行字符串连接
'no-path-concat': 1,
// 强制在function的左括号之前使用一致的空格
'space-before-function-paren': [2, 'never'],

/**
* 【================================================ Possible Errors ================================================】
* 这些规则与JavaScript代码中可能的错误或逻辑错误有关。
*/
// 禁止条件表达式中出现赋值操作符
'no-cond-assign': 2,
// 禁止在正则表达式中使用控制字符
'no-control-regex': 0,
// 禁止在正则表达式中使用空字符集
'no-empty-character-class': 2,
// 禁止不必要的布尔转换
'no-extra-boolean-cast': 2,
// 禁止不必要的括号
'no-extra-parens': [2, 'functions'],
// 禁止对function声明重新赋值
'no-func-assign': 2,
// 禁止在嵌套块中出现变量声明或function声明
'no-inner-declarations': [2, 'functions'],
// 禁止RegExp构造函数中存在无效的正则表达式字符串
'no-invalid-regexp': 2,
// 禁止在字符串和注释之外不规则的空白
'no-irregular-whitespace': 2,
// 禁止把全局对象作为函数调用
'no-obj-calls': 2,
// 禁止正则表达式字面量中出现多个空格
'no-regex-spaces': 2,
// 禁用稀疏数组
'no-sparse-arrays': 2,

/**
* 【================================================ Variables ================================================】
* 这些规则与变量声明有关。
*/
// 禁止删除变量
'no-delete-var': 2,
// 不允许标签与变量同名
'no-label-var': 2,
// 禁止将标识符定义为受限的名字
'no-shadow-restricted-names': 2,
// 禁止未声明的变量,除非它们在/*global */注释中被提到
'no-undef': 2,
// 禁止将变量初始化为undefined
'no-undef-init': 2,
// 禁止出现未使用的变量
'no-unused-vars': [2, {
'var' : 'all',
'args': 'none'
}],

/**
* 【================================================ 配置定义在插件中的规则 ================================================】
* 格式: 插件名/规则ID
*/
//
'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }]
}
}
```
.eslintignore:可以配置指定的目录或文件不进行ESLint检查。
这个项目框架是iview-admin2.x.x的,项目本身基于vue 3.x以及webpack4.x,项目自身做了基本配置。

还要安装我们的插件,

npm install eslint-plugin-html --save-dev
npm install eslint-plugin-vue --save-dev

在VS Code中自动按照ESLint规则格式化代码
在VS Code中安装插件(ESLint、Vurter、Prettier)
文件 => 首选项 => 设置打开settings.json文件,个人配置如下
---------------------

```
{
// 是否允许自定义的snippet片段提示
"editor.snippetSuggestions" : "top",
"editor.fontSize" : 20,
"editor.fontWeight" : "400",
"editor.formatOnType" : true,
"workbench.iconTheme" : "material-icon-theme",
"workbench.colorTheme" : "One Dark Pro",
"guides.enabled": false,
"editor.tabSize": 2,
"git.confirmSync": false,
"window.zoomLevel": 0,
"editor.renderWhitespace": "boundary",
"editor.cursorBlinking": "smooth",
"editor.minimap.enabled": true,
"editor.minimap.renderCharacters": false,
"window.title": "${dirty}${activeEditorMedium}${separator}${rootName}",
"editor.codeLens": true,
// 配置文件关联,以便启用对应的提示
"files.associations": {
"*.vue": "vue",
"*.wxss": "css"
},
// 配置emmet是否启用tab展开缩写
"emmet.triggerExpansionOnTab": true,
// 配置emmet对文件类型的支持
"emmet.syntaxProfiles": {
"javascript": "jsx",
"vue": "html",
"vue-html": "html"
},
// 是否开启eslint检测
"eslint.enable": true,
// 文件保存时是否根据eslint进行格式化
"eslint.autoFixOnSave": true,
// eslint配置文件
"eslint.options": {
"extensions": [
".js",
".vue"
]
},
// eslint能够识别的文件后缀类型
"eslint.validate": [
"javascript",{
"language": "vue",
"autoFix": true
},"html",
"vue"
],
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/dist": true
},
// 格式化快捷键(默认):Shift+Alt+F
// prettier进行格式化时,开启eslint支持
// "prettier.eslintIntegration": true,
// 是否使用单引号
"prettier.singleQuote": true,
}
```
总结
遇到的问题:

未安装插件(要注意观看官网的使用规则)eslint-plugin-html和eslint-plugin-vue报错;
parser的配置问题:https://github.com/vuejs/eslint-plugin-vue/issues/30
前端架构师大佬QQ群:634196762 私人群不打广告 只讨论技术
# 个人小程序 大家可以关注下
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019052122013457.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc2NDgxNA==,size_16,color_FFFFFF,t_70)

vscode 使用ESLint 自动检查,保存时自动格式化的更多相关文章

  1. vscode代码保存时自动格式化成ESLint风格(支持VUE)

    一.问题 vscode的默认的代码格式化ctrl+shift+f 无法通过eslint的代码风格检查是一个非常蛋疼的问题 同样在进行vue项目开发的时候,使用eslint代码风格检查是没啥问题的,但是 ...

  2. vscode 代码保存时自动格式化成 ESLint 风格

    vscode 的默认的代码格式化 alt+shift+f (windows) 无法通过 eslint 的代码风格检查,,, 比如: 4个空格和2个空格(ESLint) 字符串用单引号(ESLint) ...

  3. vscode代码格式化快捷键及保存时自动格式化

    一.实现vs code中代码格式化快捷键:[Shift]+[Alt]+ F 二.实现保存时自动代码格式化: 1)文件 ------.>[首选项]---------->[设置]: 2)搜索  ...

  4. Intellij IDEA 代码格式化/保存时自动格式化

    这里介绍使用google style 一.安装插件 1.settings -> plugins 选择 Browse repositories… 2.搜索google-java-format 和 ...

  5. 设置Myeclipse中的代码格式化、注释模板及保存时自动格式化

    1:设置注释的模板: 下载此模板:  codetemplates.xml 搜索Dangzhang,将其改为你自己的姓名,保存 打开eclipse/myeclipse选择 window-->Pre ...

  6. Myeclipse学习总结(3)——Myeclipse中的代码格式化、注释模板及保存时自动格式化

    设置Myeclipse中的代码格式化.注释模板及保存时自动格式化 1:设置注释的模板: 下载此模板:  codetemplates.xml This XML file does not appear ...

  7. 关于visocode 自动保存时自动添加分号问题

    先下载插件:  Vueter 打开设置的配置文件,写入一下代码: // //是否需要保存时自动格式化 "editor.formatOnSave": true, //使js 文件保存 ...

  8. vscode开发vue项目保存时自动执行lint进行修复

    vscode下载eslint插件 vscode进行设置 找到settings.json 在里面写入如下内容进行保存 {     "eslint.autoFixOnSave": tr ...

  9. Eclipse设置保存时自动给变量加final

    也是针对checkstyle的,在代码检查规范时,所有的变量必须是final.为了解决这个问题,通过以下的设置可以在eclipse保存时,自动给没有加final的变量加上final. Window-& ...

随机推荐

  1. JAVA8 JVM内存结构变了,永久代到元空间

    在文章<JVM之内存结构详解>中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化.作为面试官如果你还不知道,那么面试过程中是不是有些露怯? ...

  2. Python - Django - 删除作者

    修改 author_list.html,添加删除按钮 <!DOCTYPE html> <html lang="en"> <head> <m ...

  3. UIwindow ---密码框

    程序运行显示结果如下 : 验证密码输入错误显示如下: 代码如下 : 1> ////  PasswordInputWindow.m//  UIWindow--密码框////  Created by ...

  4. fetch jsonp请求接口

    function loadTbbRec() { var fetchJsonp = require('fetch-jsonp'); fetchJsonp(ext.info.tbbRecUrl, { he ...

  5. Http协议!(转)

    背景 我们在测试中,经常与http协议, URL打交道,不时会修改URL的参数来达到不同的测试目的或者转到不同的页面,那么,你对HTTP协议了解多少呢?今天我们来总结下. #1 HTTP协议简介 HT ...

  6. Sybase数据库网页数据维护工具

    Sybase是优秀的数据库产品,在银行,政务等行业广泛使用, 现在TreeSoft数据库管理系统已支持Sybase了,直接在浏览器中就可以操作查看Sybase数据了,十分方便.        Tree ...

  7. nginx限流方案的实现(三种方式)

    通过查看nginx官方文档,小弟查看到了三种nginx限流方式. 1.limit_conn_zone 2.limit_req_zone 3.ngx_http_upstream_module 前两种只能 ...

  8. Object.defineProperty()方法学习笔记

    这是js中一个非常重要的方法,ES6中某些方法的实现依赖于它,VUE通过它实现双向绑定 此方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象 参数 Object.def ...

  9. SpringCloud入门01之基础知识

    一.Spring Cloud 什么是spring cloud, 为什么要使用微服务架构? 参考度娘 Spring Cloud是一系列框架的有序集合, 它利用Spring Boot的开发便利性巧妙地简化 ...

  10. 解决Maven依赖本地仓库eclipse报错的问题

    一.应用场景 有时候项目报红色的感叹号错误也是由于项目中没有导入相关jar报导致报错 为了使用maven强大的包依赖管理和项目管理功能,故在项目中使用maven2作为项目建构工具. 但是我的项目在内网 ...