当前位置: 首页 > news >正文

VScode+ESlint 自动格式化代码(2021)

本文用 Vue 项目做示范,基于项目已有eslint环境。
利用 Vue CLI 创建项目时要将 ESlint 选上,下载完依赖后,用 VSCode 打开项目。

1、安装插件 ESLint,

在这里插入图片描述

2、配置eslint插件

File -> Preference-> Settings(如果装了中文插件包应该是 文件 -> 选项 -> 设置),搜索 eslint,点击 Edit in setting.json
在这里插入图片描述
将以下选项添加到配置文件

 //配置eslint
    "eslint.validate": [
        "javascript",
        "javascriptreact",
        "html",
        "vue"
    ],
    // "eslint.run": "onSave",
    "editor.codeActionsOnSave": {
        "source.fixAll": true // 保存时使用eslint校验文件
    }

:这里附上一份我的settings.json,开袋即食,把以下设置直接替换自己的即可

{
   "workbench.colorTheme": "Default Dark+",
   "workbench.sideBar.location": "left",
   "cssrem.rootFontSize": 80,
   "git.ignoreWindowsGit27Warning": true,
   "eslint.codeAction.showDocumentation": {
   		"enable": true
   },
   //配置eslint
   "eslint.validate": [
       "javascript",
       "javascriptreact",
       "html",
       "vue"
   ],
   // "eslint.run": "onSave",
   "editor.codeActionsOnSave": {
       "source.fixAll": true // 保存时使用eslint校验文件
   }
}

3、vscode开启eslint校验

有的同志的vscode编辑器可能是第一次配置,需要开启eslint校验(右下角导航里的eslint为红色禁用状态的需要开启)
在这里插入图片描述
点击之后根据自己的需求选择校验范围,我选择的是allow everywhere

4、大功告成

配置完之后,VSCode 会根据你当前 Vue 项目下的 .eslintrc.js 文件的规则来验证和格式化代码。

PS:自动格式化代码在保存时自动触发,目前试了 JS 以及 vue 文件中的 JS 代码都没问题。

补充:一键格式化项目代码

如果是整个项目里的代码都不符合自己团队想要的代码规范,再配置好上述格式化后,不想一个文件ctrl + s一次的话,那么请往下看:

1、package.json配置执行命令

package.jsonscripts属性里配置 格式化 命令

"lint": "eslint --fix --ext .js,.vue src"

在这里插入图片描述

2、全局下载eslint

npm install -g eslint

在这里插入图片描述

3、终端执行命令

npm run lint

在这里插入图片描述
这时eslint就会自动修复不符合项目里的eslint.js规范的代码

忽略校验文件

如果有的文件或者目录不想被eslint校验,那么可以在项目里添加.eslintignore文件,那么 在vscode中进行保存 或 进行一键格式化代码时, 该文件或者目录下的文件不会被校验和改动。

build/*.js
src/assets
public
dist

常见问题

1、改变vscode的缩进,不随文件改变

vscode默认会根据文件的缩进来进行显示,如果我们利用eslint校验并自动修改为自己想要的缩进时,视图上而可能还显示为原本文件的缩进格式,如下图所示
在这里插入图片描述
可以看到文件已经修改为4个空格的缩进,但是视图里还是2个空格的分割线显示。

这时有两个方法可以解决:
1、如果只想改变当前文件的缩进显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样当前文件的缩进显示就正确了
2、改变编辑器所有的文件缩进显示
File -> Preference-> Settings(如果装了中文插件包应该是 文件 -> 选项 -> 设置)
直接解绑按照文件缩进进行显示,设置一个默认的缩进大小,所有文件都按照这个缩进大小进行显示在这里插入图片描述
在这里插入图片描述
设置完之后,就可以发现所有的文件都是按照上面填写的tabsize(这里我填写的是4)进行缩进显示了

eslintrc.js配置

module.exports = {
    root: true,
    parserOptions: {
        parser: 'babel-eslint',
        sourceType: 'module'
    },
    env: {
        browser: true,
        node: true,
        es6: true,
    },
    extends: ['plugin:vue/recommended', 'eslint:recommended'],
    globals: { // 设置jquery为全局
        "$": true
    },
    // add your custom rules here
    //it is base on https://github.com/vuejs/eslint-config-vue
    rules: {
        "vue/html-indent": [2, 4, {
            "attribute": 1
        }],
        "vue/prop-name-casing": [2, "camelCase"], // 声明prop时,在 JavaScript 中是 camelCase,在 HTML 中则是 kebab-case
        "max-len": [2, 120],
        "vue/max-attributes-per-line": [2, { // 单行每行不能超过2个,多行每行不能超过1个
            "singleline": 2,
            "multiline": {
                "max": 1,
                "allowFirstLine": false // 多行时不允许属性放置在第一行
            }
        }],
        "vue/singleline-html-element-content-newline": "off",
        "vue/multiline-html-element-content-newline": "off",
        "vue/name-property-casing": ["error", "PascalCase"],
        "vue/no-v-html": "off",
        'accessor-pairs': 2,
        'arrow-spacing': [2, {
            'before': true,
            'after': true
        }],
        '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'],
        'constructor-super': 2,
        'curly': [2, 'multi-line'],
        'dot-location': [2, 'property'],
        'eol-last': 2,
        'eqeqeq': ["error", "always", { "null": "ignore" }],
        'generator-star-spacing': [2, {
            'before': true,
            'after': true
        }],
        'handle-callback-err': [2, '^(err|error)$'],
        'indent': [2, 4, {
            'SwitchCase': 1
        }],
        'jsx-quotes': [2, 'prefer-single'],
        'key-spacing': [2, {
            'beforeColon': false,
            'afterColon': true
        }],
        'keyword-spacing': [2, {
            'before': true,
            'after': true
        }],
        'new-cap': [2, {
            'newIsCap': true,
            'capIsNew': false
        }],
        'new-parens': 2,
        'no-array-constructor': 2,
        'no-caller': 2,
        'no-console': 'off',
        'no-class-assign': 2,
        'no-cond-assign': 2,
        'no-const-assign': 2,
        'no-control-regex': 0,
        'no-delete-var': 2,
        'no-dupe-args': 2,
        'no-dupe-class-members': 2,
        'no-dupe-keys': 2,
        'no-duplicate-case': 2,
        'no-empty-character-class': 2,
        'no-empty-pattern': 2,
        'no-eval': 2,
        'no-ex-assign': 2,
        'no-extend-native': 2,
        'no-extra-bind': 2,
        'no-extra-boolean-cast': 2,
        'no-extra-parens': [2, 'functions'],
        'no-fallthrough': 2,
        'no-floating-decimal': 2,
        'no-func-assign': 2,
        'no-implied-eval': 2,
        'no-inner-declarations': [2, 'functions'],
        'no-invalid-regexp': 2,
        'no-irregular-whitespace': 2,
        'no-iterator': 2,
        'no-label-var': 2,
        'no-labels': [2, {
            'allowLoop': false,
            'allowSwitch': false
        }],
        'no-lone-blocks': 2,
        'no-mixed-spaces-and-tabs': 2,
        'no-multi-spaces': 2,
        'no-multi-str': 2,
        'no-multiple-empty-lines': [2, {
            'max': 1
        }],
        'no-native-reassign': 2,
        'no-negated-in-lhs': 2,
        'no-new-object': 2,
        'no-new-require': 2,
        'no-new-symbol': 2,
        'no-new-wrappers': 2,
        'no-obj-calls': 2,
        'no-octal': 2,
        'no-octal-escape': 2,
        'no-path-concat': 2,
        'no-proto': 2,
        'no-redeclare': 2,
        'no-regex-spaces': 2,
        'no-return-assign': [2, 'except-parens'],
        'no-self-assign': 2,
        'no-self-compare': 2,
        'no-sequences': 2,
        'no-shadow-restricted-names': 2,
        'no-spaced-func': 2,
        'no-sparse-arrays': 2,
        'no-this-before-super': 2,
        'no-throw-literal': 2,
        'no-trailing-spaces': 2,
        'no-undef': 2,
        'no-undef-init': 2,
        'no-unexpected-multiline': 2,
        'no-unmodified-loop-condition': 2,
        'no-unneeded-ternary': [2, {
            'defaultAssignment': false
        }],
        'no-unreachable': 2,
        'no-unsafe-finally': 2,
        'no-unused-vars': [2, {
            'vars': 'all',
            'args': 'none'
        }],
        'no-useless-call': 2,
        'no-useless-computed-key': 2,
        'no-useless-constructor': 2,
        'no-useless-escape': 0,
        'no-whitespace-before-property': 2,
        'no-with': 2,
        'one-var': [2, {
            'initialized': 'never'
        }],
        'operator-linebreak': [2, 'after', {
            'overrides': {
                '?': 'before',
                ':': 'before'
            }
        }],
        'padded-blocks': [2, 'never'],
        'quotes': [2, 'single', {
            'avoidEscape': true,
            'allowTemplateLiterals': true
        }],
        'semi': [2, 'always'],
        'semi-spacing': [2, {
            'before': false,
            'after': true
        }],
        'space-before-blocks': [2, 'always'],
        'space-before-function-paren': [2, 'never'],
        'space-in-parens': [2, 'never'],
        'space-infix-ops': 2,
        'space-unary-ops': [2, {
            'words': true,
            'nonwords': false
        }],
        'spaced-comment': [2, 'always', {
            'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
        }],
        'template-curly-spacing': [2, 'never'],
        'use-isnan': 2,
        'valid-typeof': 2,
        'wrap-iife': [2, 'any'],
        'yield-star-spacing': [2, 'both'],
        'yoda': [2, 'never'],
        'prefer-const': 2,
        'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
        'object-curly-spacing': [2, 'always', {
            objectsInObjects: false
        }],
        'array-bracket-spacing': [2, 'never']
    }
}

相关文章:

  • 项目代理工作手册II(工作流程+收益分析)——CSDN外包实践(40)
  • eslint关闭 nodef 校验
  • box-sizing失效情况
  • 多留点时间给生活和家人!
  • vue、uniapp 动态创建input进行文件上传
  • Js 三种绑定事件方式 及 区别
  • [软工] 楼上SLM 雏形具现
  • js promise resolve()的用法
  • 寻找传说中的“卡塔西斯”...
  • uniapp 页面通讯 uni.$on执行多次
  • 教材编者,请多点儿“钻研”精神
  • js 合并两个数组
  • 全国.NET俱乐部领导人在线会议报道
  • uniapp 动态获取节点信息
  • 记张自忠将军(梁实秋)
  • SegmentFault for Android 3.0 发布
  • C++入门教程(10):for 语句
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • php面试题 汇集2
  • Selenium实战教程系列(二)---元素定位
  • Spring Cloud中负载均衡器概览
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue的全局变量和全局拦截请求器
  • Webpack 4 学习01(基础配置)
  • 从零开始的无人驾驶 1
  • 飞驰在Mesos的涡轮引擎上
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前言-如何学习区块链
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 写给高年级小学生看的《Bash 指南》
  • 一份游戏开发学习路线
  • 硬币翻转问题,区间操作
  • 你对linux中grep命令知道多少?
  • #pragma预处理命令
  • #在 README.md 中生成项目目录结构
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (论文阅读30/100)Convolutional Pose Machines
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)创业家杂志:UCWEB天使第一步
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net中ListT 泛型转成DataTable、DataSet
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @31省区市高考时间表来了,祝考试成功
  • @Conditional注解详解
  • @hook扩展分析
  • @vue/cli 3.x+引入jQuery
  • [ NOI 2001 ] 食物链
  • [2016.7.Test1] T1 三进制异或
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C++]AVL树怎么转
  • [CSS]浮动