Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )

news2024/11/20 14:33:37

在这里插入图片描述

ESLint

  ​在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一般都会配合其他语法检测工具一起使用,最经典的组合是Eslint+ Prettier 。

  ​Eslint 和 Prettier 并不局限于 Vue.js,而是掌握 JavaScript 的必备知识,所以推荐给不懂 ESLint 的同学。即使你看了这篇文章,你也会无法理解 ESLint 和 Prettier 的所有规则,但是通过查看运行你可以完全理解 ESLint 和 Prettier 是做什么的。下面让我们通过实际检查操作而不是用文字解释来轻松理解 ESLint 的作用与使用。

目录

  • ESLint
    • 1 ESLint创建
    • 2 ESLint 规则设置
    • 3 ESLint验证设置
    • 4 ESLint格式化设置
    • 5 ESLint自动修复
    • 6 Prettier
    • 7 Babel
    • 8 airbnb 与 standard
    • 9 ESLint 中TypeSript设置

第一章 Vue3项目创建 1 Vue CLI 创建vue项目
第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目
第一章 Vue3项目创建 3 Vite 创建 vue项目
第二章 Vue3 基础语法指令
第三章 Vue Router路由器的使用
第四章 VUE常用 UI 库 1 ( element-plus,Ant ,naiveui,ArcoDesign)
第四章 VUE常用 UI 库 2 ( ailwind 后台框架)
第五章 Vue 组件应用 1( Props )
第五章 Vue 组件应用 2 ( Emit )
第五章 Vue 组件应用 3( Slots )
第五章 Vue 组件应用 4 ( provide 和 inject )
第五章 Vue 组件应用 5 (Vue 插件)
第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
第六章 Pinia,Vuex与axios,VueUse 2(Vuex)
第六章 Pinia,Vuex与axios,VueUse 3(VueUse)
第六章 Pinia,Vuex与axios,VueUse 4(axios)
第七章 TypeScript 上
第七章 TypeScript 中
第七章 TypeScript 下 创建Trello 任务管理器
第八章 ESLint 与 测试 ( ESLint )

1 ESLint创建

在Vue项目中导入ESLint组件,ESLint官网 https://eslint.org/docs/latest/地址。

  1. 首先,安装 ESLint:
npm install eslint --save-dev
//安装vue项目中eslint插件
npm install eslint-plugin-vue --save-dev
  1. 然后,初始化 ESLint 配置文件:
npm init @eslint/config
或者
npx eslint --init

? How would you like to use ESLint? ...
  To check syntax only //仅检查语法
> To check syntax and find problems //检查语法并发现问题
  //检查语法、发现问题并强制执行代码风格
  To check syntax, find problems, and enforce code style
//对项目代码质量要求不高的项目可以选择一和二
//选择“检查语法并发现问题”,因为稍后我们还将使用 Prettier 来强制执行代码样式。

? What type of modules does your project use? ...
> JavaScript modules (import/export)
  CommonJS (require/exports)
  None of these
//选择 JavaScript 模块主要是因为 Vue3 使用它们。
  
? Which framework does your project use? ...
  React
> Vue.js
  None of these 
//选择Vue项目
  
//选择是否验证TypeScript语法
 ? Does your project use TypeScript? » No / Yes 
//项目没有使用TypeScript选择no

//你的代码在哪里运行 
? Where does your code run? ...  (Press <space> to select, <a> to toggle all, <i> to invert selection)
√ Browser
√ Node 
//选择Browser“浏览器”,因为 Vue项目需要在浏览器上运行web项目,如果是桌面或者是app选择Node。

//您希望您的配置文件采用什么格式
? What format do you want your config file to be in? … 
  JavaScript
  YAML
▸ JSON
//开发中一般会使用JavaScript与JSON作为配置 .eslintrc文件格式。

eslint-plugin-vue@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest

//你想现在用 npm 安装它们吗? 选择是
? Which package manager do you want to use? ...
> npm
  yarn
  pnpm

执行完成后将在项目中新创建一个 .eslintrc.cjs 文件。

项目
 |---node_modules
 |---src       
 |---.eslintrc.cjs    ESLint配置文件  
 |---package.json     项目组件文件
 |---vite.config.js   vite配置文件

接下来在项目中的 package.json 文件中添加以下脚本。

"scripts": {
  "lint": "eslint --ext .js,.vue src"
}

最后,可以在终端中运行 npm run lint 命令来检测代码。

npm run lint
> vue-line@0.0.0 lint      
> eslint --ext .js,.vue src

  ​在 ESLint 初始化成功后,在项目中出现一个.eslintrc.js文件,文件内容如下。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential"
    ],
    "overrides": [
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "vue"
    ],
    "rules": {
    }
}

  ​你可以在 package.json 文件中检查到eslint与eslint-plugin-vue导入的规则版本。

{
 ......
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.0.0",
    "eslint": "^8.32.0",
    "eslint-plugin-vue": "^9.9.0",
    "vite": "^4.0.0"
  }
}

2 ESLint 规则设置

  ​在项目根目录下的**.eslintrc.cjs文件中的extends**属性中定义了项目使用的规则组件。以后与ESLint有关的其他规则组件都需要在extends中进行加入,后边会涉及的Prettier 组件也会在extends中设置。只有在extends中引入的规则组件才会在ESLint检测的中被使用到。

  • eslint:recommended 是ESLint的原始规则。
  • plugin:vue/vue3-essential 是vue语法模板规则。
"extends": [
    "eslint:recommended",
    "plugin:vue/vue3-essential"
],

  ​从ESLint文档https://eslint.org/docs中查看“eslint:recommended”应用的验证规则内容。

  ​从eslint-plugin-vue官网上https://eslint.vuejs.org/rules/查看到Vue的验证规则内容。

为了验证规则的有效性,我们将App.vue文件中的代码进行了修改。

<script setup>
import HelloWorld from './components/HelloWorld.vue'
let msg="测试验证lint";
</script>
<template>
</template>
<style scoped>
</style>

  ​执行lint语法检测功能,编辑器会提示一些语法规则检测错误信息。

npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
  2:8  error  'HelloWorld' is defined but never used    no-unused-vars
  3:5  error  'msg' is assigned a value but never used  no-unused-vars
  5:1  error  The template requires child element       vue/valid-template-root
✖ 3 problems (3 errors, 0 warnings)

  ​上面前两个编译失败发生错误的“no-unused-vars”提示,是由于ESLint 规则检测到的。ESLint 规则的与 vue 规则不同,开头没有“vue/”的错误提示都是ESLint中的原始规则错误。 vue/valid-template-root是eslint-plugin-vue检测出来Vue语法错误的规则提示。

在ESLint官网中查询到no-unused-vars错误信息内容,没有未使用定义的变量。

在这里插入图片描述

在eslint.vuejs官网中可以查询到 vue/valid-template-root规则信息提示内容,提示错误信息模板中没有内容。

在这里插入图片描述

3 ESLint验证设置

  ​ .eslintrc.js 文件中的rules属性是用于设置ESLint的验证的地方,通过设置rules中的属性来控制整个ESLint检测内容,例如关闭有冲突的规则,关闭不想使用的规则,缩进格式等等内容。下面我们要关闭上面出现错误提示的vue/valid-template-root规则,编辑 .eslintrc.js 文件中的rules属性,在rules属性里添加vue/valid-template-root,并设置其值为off,off表示错误级别,表示关闭验证。

module.exports = {
    ......
    "plugins": [
        "vue"
    ],
    "rules": {
        //关闭vue/valid-template-root验证
        'vue/valid-template-root':'off'
    }
}

  ​设置完成后,再次执行 npm run lint命令,编译成功后会发现错误提示中的vue/valid-template-root信息不见了。

 npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
  2:8  error  'HelloWorld' is defined but never used        no-unused-vars
  3:5  error  'msg' is assigned a value but never used      no-unused-vars

  ​错误级别除了“off”之外还有“warn”(警告)和“error”(错误)都是规则的设置值。设置为error会导致编译失败。如果设置为warn,会显示警告信息,但是编译会正常运行。为了开发调试方便将项目中的console与debugger错误关闭,在项目发布打包的时候可以将这个检测在打开。

  rules: {
    'vue/valid-template-root':'off'
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  },

4 ESLint格式化设置

  ​ESLint 也可以用作格式化程序(代码格式化),所以我也会检查如何设置它。通过使用格式化程序,您可以设置缩进并统一整个项目文件中是否存在引号和分号。

  ​使用 ESLint 规则将缩进从 2 更改为 4。格式化程序也可以写在 .eslintrc.js 文件中。设置是在一个数组中进行的,在第一个元素中设置错误级别,在第二个元素中设置设置值。

module.exports = {
    ......
    "plugins": [
        "vue"
    ],
    "rules": {
        'vue/valid-template-root':'off',
        'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        //格式化验证缩进4行
        'indent': ['error', 4]
    }
}

在这里,我们将检查缩进设置。查看 App.vue 文件,当前缩进为 2。

<script setup>
let msg="测试验证lint";
const onfind=()=>{
//当前缩进为2空格    
  alert(1);
}
</script>
<template>
  <div @click="onfind">我格式缩进2格</div>
</template>
<style scoped>
</style>

  ​ 执行lint语法检测命令,编辑器会出现编译错误。第 5-1 行是错误的,因为它们只缩进了 2 格,正确的缩进4个空格。

npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
  2:5  error  'msg' is assigned a value but never used      no-unused-vars
  5:1  error  Expected indentation of 4 spaces but found 2  indent

vue模板格式设置

  ​ 这个时候你会发现在App.vue代码中的规则验证,只对script标签中的代码缩进4格规则进行了检测,但是template标签里面的HTML缩进并没有进行规则检测。你要对模板中的HTML缩进进行验证就需要在 .eslintrc.js文件中设置模板的验证项,加入 vue/html-indent 规则验证改模板标签的缩进。

module.exports = {
    ......
    "plugins": [
        "vue"
    ],
    "rules": {
        'vue/valid-template-root':'off',
        'indent': ['error', 4],
        //模板格式设置
        "vue/html-indent": ["error", 4]
    }
}

执行lint语法检测命令就会看到针对template标签里面的HTML缩进的错误提示了。

 npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
  2:5  error  'msg' is assigned a value but never used             no-unused-vars
  5:1  error  Expected indentation of 4 spaces but found 2         indent
  9:1  error  Expected indentation of 4 spaces but found 0 spaces  vue/html-indent

第 9-1 行是错误提示没有缩进4个空格。

5 ESLint自动修复

​  ​ 我们可以在代码中来修改缩进4个空格的错误,但是有的时候代码量巨大的时候这就是一个艰巨的任务。在ESLint指令中提供了一个自动修复错误的指令,可以帮助我们轻松解决这个问题。在npm run lint后边加上-- --fix参数。

npm run lint -- --fix

运行命令对项目中所有的代码进行检测与修复。

npm run lint -- --fix
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src "--fix"
D:\vue\vue-line\src\App.vue
  2:5  error  'msg' is assigned a value but never used  no-unused-vars

App.vue中的代码缩进格数都变成了4格。

<script setup>
let msg="测试验证lint";
const onfind=()=>{
//当前缩进为2空格    
    alert(1);
}
</script>
<template>
    <div @click="onfind">我格式缩进2格</div>
</template>
<style scoped>
</style>

6 Prettier

​  ​ Prettier是一款超强的代码格式化工具,与ESLint,TSLint等各种格式化工具不同的是,Prettier只检测代码格式化的格式问题,而不关心语法问题。所以在项目中可以单独用ESLint检测代码的质量,但由于ESLint专门针对语法进行分析,所以有些代码部分会覆盖不到,这个时候需要使用到Prettier来进行代码的格式检测了。

npm install prettier --save-dev 
npm install @vue/eslint-config-prettier eslint-plugin-prettier --save-dev
  • prettier prettier格式化。
  • eslint-config-prettier 它提供了一个设置来关闭所有 Prettier 可以覆盖的 ESLint 规则,解决 ESLint 与 Prettier 冲突。
  • vue/eslint-config-prettier 用与Vue 项目中,它禁用了所有与 Prettier 冲突的 ESLint 规则,以保证 Prettier 的代码格式化功能在Vue项目中可以正常工作。

在package.json 文件中会看到,新增加“@vue/eslint-config-prettier”、“eslint-plugin-prettier”、“prettier”三个包。

{
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.0.0",
    "@vue/eslint-config-prettier": "^7.0.0",
    "eslint": "^8.33.0",
    "eslint-plugin-prettier": "^4.2.1",
    "eslint-plugin-vue": "^9.9.0",
    "prettier": "^2.8.3",
    "vite": "^4.0.0"
  }
}

在ESLint的 配置文件.eslintrc.cjs中,extends属性中加入“@vue/prettier”格式化组件。

module.exports = {
    ......
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "@vue/prettier"
    ],
}

​  ​运行检测指令,会发现 prettier 组件检测到代码中所有的格式化的错误信息。例如代码结尾“;”冒号,提示双引号改成了单引号,代码的缩进不规范等等问题。

npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
   2:5   error    'msg' is assigned a value but never used      no-unused-vars
   2:8   warning  Replace `="测试验证lint"` with `·=·"测试验证lint";`   prettier/prettier
   3:13  warning  Replace `=()=>` with `·=·()·=>·`              prettier/prettier
   4:1   warning  Replace `//当前缩进为2空格····` with `··//当前缩进为2空格`  prettier/prettier 
   5:1   error    Expected indentation of 4 spaces but found 2  indent
   6:2   warning  Insert `;`                                    prettier/prettier
  11:15  warning  Delete ``                                    prettier/prettier
D:\vue\vue-line\src\main.js
  1:27  warning  Replace `'vue'` with `"vue";`                  prettier/prettier
  2:8   warning  Replace `'./style.css'` with `"./style.css";`  prettier/prettier
  3:17  warning  Replace `'./App.vue'` with `"./App.vue";`      prettier/prettier
  5:22  warning  Replace `'#app')` with `"#app");`              prettier/prettier
✖ 15 problems (3 errors, 12 warnings)
  1 error and 12 warnings potentially fixable with the `--fix` option.

​  ​当运行自动自动修正指令后, Prettier组件也会做同样的事情。Prettier 会根据默认规则自动修正vue项目中的代码,而无需手工修改代码格式。

 npm run lint -- --fix
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src "--fix"
D:\vue\vue-line\src\App.vue
  2:5  error    'msg' is assigned a value but never used      no-unused-vars
  4:3  warning  Delete `··`                                   prettier/prettier
  5:1  error    Expected indentation of 4 spaces but found 2  inden
 ✖ 4 problems (3 errors, 1 warning)
  1 error and 1 warning potentially fixable with the `--fix` option.

​  ​可以看到App.vue中的代码格式已经变得符合规范了,无需我们自己手动调整代码格式。

<script setup>
let msg = "测试验证lint";
const onfind = () => {
    //当前缩进为2空格
  alert(1);
};
</script>
<template>
  <div @click="onfind">我格式缩进2格</div>
</template>
<style scoped></style>

1 .prettierrc文件配置

​  ​在 Vue 项目安装文件夹中创建一个Prettier的配置文件 .prettierrc。.prettierrc 文件是Prettier组件的配置文件,用于配置Prettier的格式化规则,如换行符、默认缩进2,行尾分号,双引号等格式。在.prettierrc文件中根据项目实际情况来定义自己的定义检测项目。

项目
 |---node_modules
 |---src       
 |---.eslintrc.cjs    ESLint配置文件
 |---.prettierrc      Prettier配置文件   
 |---package.json     项目组件文件
 |---vite.config.js   vite配置文件

在.prettierrc文件中写入一下配置。

{
  "tabWidth": 4, //缩进宽度
  "semi": false,//代码结尾不使用;号
  "singleQuote": true //使用单引号而不是双引号
}

在官网中可以https://prettier.io/docs/en/options.html查看到全部的检测格式说明。

在这里插入图片描述

运行 npm run lint 查看到代码格式错误提示。

 npm run lint
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src
D:\vue\vue-line\src\App.vue
  2:5   error    'msg' is assigned a value but never used      no-unused-vars
  2:11  warning  Replace `"测试验证lint";` with `'测试验证lint'`       prettier/prettier
  4:1   warning  Replace `··` with `····`                      prettier/prettier
  4:1   error    Expected indentation of 4 spaces but found 2  indent
  5:1   warning  Replace `··alert(1);` with `····alert(1)`     prettier/prettier
  5:1   error    Expected indentation of 4 spaces but found 2  indent
  9:1   warning  Insert `··`                                   prettier/prettier
 ✖ 8 problems (4 errors, 4 warnings)
  2 errors and 4 warnings potentially fixable with the `--fix` option.

同样可以使用npm run lint – --fix指令自动修复代码格式规则。

npm run lint -- --fix
> vue-line@0.0.0 lint
> eslint --ext .js,.vue src "--fix"
D:\vue\vue-line\src\App.vue
  2:5  error  'msg' is assigned a value but never used  no-unused-vars
✖ 2 problems (2 errors, 0 warnings)

App.vue中的代码发生变化,格式错误被修复。代码中的;号消失了,双引号变成引号,缩进变成4格。

<script setup>
let msg = '测试验证lint'
const onfind = () => {
    //当前缩进为2空格
    alert(1)
}
</script>
<template>
    <div @click="onfind">我格式缩进2格</div>
</template>
<style scoped></style>

2 .eslintrc.cjs 中设置Prettier配置

​  ​可以在.eslintrc.cjs 文件中来配置.prettierrc中的相同功能。这样在项目中就不需要使用**.prettierrc**配置文件来设置格式检测规则,可以使项目更加整洁一些。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "@vue/prettier"
    ],
    "overrides": [
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "vue"
    ],
    "rules": {
        'vue/valid-template-root':'off',
        'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        //prettier验证设置
        "prettier/prettier": [
            "error",
            {
              tabWidth: 2,
              singleQuote: false,
              semi: true,
            },
          ],
    }
}

7 Babel

​​  ​Babel是种JavaScript代码编译器,它可以将ES6、ES7、ES8等的代码转换为ES5代码,更好理解的说法就是将node语法代码转换成可以在浏览器中运行的javascript代码。Babel可以和ESLint组合在一起来完成vue项目中的代码质量检测,Babel做代码的转换工作,ESLint做代码中的语法错误检查和修复。

​​  ​将它们两个组合在一起,可以实现代码的静态分析与检测,排查可能出现的问题与风险点,它会将node语法代码和css样式html模板样式在不启动服务器执行的情况下就可以检测到整个项目代码中潜在的问题。Babel与ESLint组件在集成到项目的时候需要引入多种类型的@babel组件,可以在官网中找到你要使用的编译的对应类型组件。如果项目版本较低可以使用babel-eslint组件。Babel的官方网址https://babeljs.io/。

1 在项目中导入babel依赖组件。

npm install  @babel/core @babel/eslint-parser --save-dev
npm install  @babel/preset-env --save-dev
npm install  @babel/preset-react --save-dev

2 在**.eslintrc.cjs**文件中的设置babel信息,parser属性中配置"@babel/eslint-parser",可以在parserOptions属性中设置其他配置选项。

  • requireConfigFile false 允许@babel/eslint-parser 在没有 Babel 配置的文件的情况下运行。
  • babelOptions Babel 解析器的配置对象,代替配置文件的配置Babel 基础设置项目。
module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "@vue/prettier"
    ],
    "overrides": [
    ],
    //vue-eslint-parser
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        //无配置文件模式
        "requireConfigFile": false,
        //ESLint集成babel插件
        "parser": '@babel/eslint-parser',
        //babel配置信息设置
        "babelOptions": {
            babelrc: false,
            configFile: false,
            //babel使用什么类型的编辑器组件
            presets: ["@babel/preset-env"],           
            "parserOpts": {
                "plugins": ["jsx"]
            }
        } 
    },
    "plugins": [
        "vue"
    ],
    "rules": {
    }
}

App.vue文件中的代码内容,我们使用ESLint+Prettier与Babel进行质量检测。

<script setup>
const msg='测试验证lint'
const onfind =()=> {
// 当前缩进为2空格
alert(1)
}
</script>
<template>
<div @click="onfind">我格式缩进2格</div>
</template>
<style scoped>

运行npm run lint 指令验证Babel是否配置成功,后端没有异常,有检测语法错误提示出来,表示Babel组件集成成功。

npm run lint

> vue-line@0.0.0 lint
> eslint --ext .js,.vue src

D:\vue\vue-line\src\App.vue
   2:7   error    'msg' is assigned a value but never used     no-unused-vars
   2:10  warning  Replace `='测试验证lint'` with `·=·"测试验证lint";`  prettier/prettier
   3:15  warning  Replace `()` with `·()·`                     prettier/prettier
   4:1   warning  Insert `··`                                  prettier/prettier
   5:1   warning  Replace `alert(1)` with `··alert(1);`        prettier/prettier
   6:2   warning  Insert `;`                                   prettier/prettier
   9:1   warning  Insert `··`                                  prettier/prettier
  12:5   warning  Insert `·`                                   prettier/prettier
  13:1   warning  Replace `font-size:` with `··font-size:·`    prettier/prettier

D:\vue\vue-line\src\components\HelloWorld.vue
  2:10  error    'ref' is defined but never used      no-unused-vars
  2:21  warning  Replace `'vue'` with `"vue";`        prettier/prettier
  5:1   error    The template requires child element  vue/valid-template-root

D:\vue\vue-line\src\main.js
  1:27  warning  Replace `'vue'` with `"vue";`                  prettier/prettier
  2:8   warning  Replace `'./style.css'` with `"./style.css";`  prettier/prettier
  3:17  warning  Replace `'./App.vue'` with `"./App.vue";`      prettier/prettier
  5:22  warning  Replace `'#app')` with `"#app");`              prettier/prettier
✖ 16 problems (3 errors, 13 warnings)

​​  ​如果将要使用Babel配置文件来设置Babel功能,需要在**.eslintrc.cjs文件中requireConfigFile** 属性删除。在项目的根目录中创建**.babelrc文件,在.babelrc**文件设置Babel功能项。

.babelrc文件中设置@babel/preset-env组件内容,.babelrc文件中的参数属性可以在官网查看。

{
    "presets": [
      [
        "@babel/preset-env",
          {
            "targets": {
              "ie": 11,
              "esmodules": true
            },
            "useBuiltIns": "usage",
            "corejs": 3
          }
        ]
    ]
 }

​​  ​Babel 在编辑JavaScript,CSS,HTML,TyptSricpt,其他模板语言的时候,会用到它们对应的@Babel 组件。我们需要在官网上查到这些对应语言的使用组件,使用将它们导入到项目中,在.babelrc文件中配置组件的插入就可以使用ESLint+Babel模式来检查和提高代码质量了。

8 airbnb 与 standard

​​  ​在上面介绍了Prettier,Babel与ESLint集成使用的情况。但是在实际开发中配置ESLint与这些第三方组件联合使用的过程非常繁琐麻烦,需要解决各种版本冲突和兼容性,语言编译解析等等问题。当这些检测,格式,编译转录组件的规则配置信息数量庞大后,组件之间的冲突与维护会变得非常困难。我们会把配置文件写的复杂又难以理解,有的时候会出现各种奇怪的问题,需要花费大量的时间去调试它们,项目会变得非常难以维护。为了很好的解决上面的问题,出现了一种整套的规则检测组件,不需要在维护这些复杂的组件关系和它们在配置文件中的各种规则设置。我们直接导入一套规则组件,在项目中只对这一套规则组件进行配置与维护。

​​  ​现在比较流行的 standard 和 airbnb 两个规则组件,它们是现阶段使用最多最流行,整体实践效果最好的规则组件。我们只需要直接拿来使用它们的功能,而不需要在设置其他组件来进行质量检验了。standard 和 airbnb检测组件可以很方便的帮助我们在项目中检查出代码中的可能错误和潜在问题,以保证项目的质量和可维护性。如果你从来没有使用过 airbnb 之类的检测规则来检测过项目代码,那么你编写的代码中的各个地方都有可能出现错误。

1 airbnb

​​  ​导入airbnb组件到项目中来,它的验证规则属性可以在https://github.com/lin-123/javascript中查看到。

npm install --save-dev @vue/eslint-config-airbnb 
npm install --save-dev eslint-config-airbnb-base

在ESLint的配置文件.eslintrc.cjs 中的extends属性里设置 ‘@vue/airbnb’,它可以同时设置使用多个规则组件内容。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        'plugin:vue/vue3-essential',
        '@vue/airbnb',
    ],
    "overrides": [
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "vue"
    ],
    "rules": {
        'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
        'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
        'vuejs-accessibility/click-events-have-key-events': 'off',   
    }
}

运行检测npm run lint检测指令,可以看到项目代码已经运行airbnb中设置的验证规则了。

npm run lint
npm run lint -- --fix

standard使用

​​  ​standard使用与airbnb 基本一样,在项目中导入它的基础组件包和eslint兼容包,在eslint中加载这个standard规则。standard中所有验证规则在https://github.com/standard/standard/blob/master/docs/RULES-zhcn.md#javascript-standard-style中查看到。

npm install standard --save-dev
npm install @vue/eslint-config-standard --save-dev
//加入.eslintrc.cjs 文件中
module.exports = {
    "extends": [
       'plugin:vue/vue3-essential',
       '@vue/standard'
    ],
}
//检测与自动修复
npm run lint
npm run lint -- --fix

大家在实际的开发中可以根据自己项目情况来选择最适合的组合方式。

  • ESLint

  • ESLint+Prettier

  • ESLint+Prettier+Babel

  • ESLint+airbnb

  • ESLint+standard

9 ESLint 中TypeSript设置

​​  ​TypeSript类型的项目中加入ESLint的TypeSript规则检测,第一种方式是通过初始化eslint来导入TypeSript检测所需要的包,

npm init vite@latest ESLint-TypeSript
cd ESLint-TypeSript
npm install
//安装vue项目中eslint插件
npm install eslint --save-dev
//安装vue项目中eslint插件
npm install eslint-plugin-vue --save-dev
npm init @eslint/config

? How would you like to use ESLint? ...
  To check syntax only //仅检查语法
> To check syntax and find problems //检查语法并发现问题
? What type of modules does your project use? ...
> JavaScript modules (import/export)

? Which framework does your project use? ...
  React
> Vue.js
? Does your project use TypeScript? » No / Yes 

? Where does your code run? ...  (Press <space> to select, <a> to toggle all, <i> to invert selection)
√ Browser
? Which package manager do you want to use? ...
> npm
  yarn
  pnpm

已有eslint项目中可以不使用初始化的方式来创建typescript-eslint,可以直接使用npm导入的方式导入typescript-eslint规则验证包。

npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-vue
  • @typescript-eslint/parser 允许 ESLint 加载 Typescript 的解析器。
  • @typescript-eslint/eslint-plugin 为 Typescript 提供 Lint 规则的插件。

.eslintrc.cjs文件设置

在.eslintrc.cjs文件中的parserOptions元素中加入parser属性和值@typescript-eslint/parser,在语法检测的时候可以检测typesrcipt语法内容。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "plugin:@typescript-eslint/recommended",
    ],
    "overrides": [
    ],
    "parser": "vue-eslint-parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "parser": "@typescript-eslint/parser",
    },
    "plugins": [
        "vue"
    ],
    "rules": {
    }
}

“parser”: “vue-eslint-parser” 这句很重要,必须要加上。

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

prettier配置文件的写法。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "plugin:@typescript-eslint/recommended",
        "@vue/prettier",
    ],
    "overrides": [
    ],
    "parser": "vue-eslint-parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "parser": "@typescript-eslint/parser",
    },
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    "rules": {
    }
}

standard 规则引入

在eslint+typescript项目环境中加入standard规则组件,需要先引入standard-with-typescript包到项目中来。

npm install @vue/eslint-config-standard-with-typescript --save-dev 

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "plugin:vue/vue3-essential",
        '@vue/eslint-config-standard-with-typescript'
    ],
    "overrides": [
    ],
    "parser": "",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
    },
    "plugins": [
        "vue"
    ],
    "rules": {
    //关闭引入规则 vite/client, use `import` style instead
    '@typescript-eslint/triple-slash-reference': 'off'
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用

查看原文>>>【案例教程】基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用 Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析…

MFC扩展库BCGControlBar Pro v33.6新版亮点 - 图形管理器改造升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.6已正式发布了&#xff0c;此版本包含了对图表组件的改进、带隐藏标签的单类功能区栏…

智慧公厕改变城市生活,厕所革命标杆应用解决方案

随着城市化进程的加快&#xff0c;公厕作为城市基础设施的重要组成部分&#xff0c;扮演着不可忽视的角色。然而&#xff0c;传统的公厕粗放型管理模式&#xff0c;已经无法满足市民日益增长的需求。为了提升公厕的管理和服务水平&#xff0c;智慧公厕应运而生。 什么是智慧公…

百万粉丝大V将前台实名制

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 这事慢慢实锤了&#xff1a;网络大V前台实名制要实施了。 根据微博洪榕爆料&#xff1a;10月底之前&#xff0c;100万粉丝的自媒体账号前台展示真实姓名; 12月份&#xff0c;50万粉的自媒体账号前…

看了这个配电柜管理,我人都傻了!

随着社会的不断发展和电力系统的不断完善&#xff0c;配电柜监控系统变得越来越关键。系统为电力分配和管理提供了关键性的支持&#xff0c;确保电能供应的稳定性和安全性。 客户案例 工业制造业 在工业制造领域&#xff0c;电力分配至关重要。某制造公司面临着高负荷和严格的生…

自动驾驶的法律和伦理问题

随着自动驾驶技术的不断发展&#xff0c;出现了一系列与法律和伦理有关的问题。这些问题涵盖了自动驾驶的法律框架、道路规则以及伦理挑战。本文将探讨这些问题&#xff0c;并分析自动驾驶所带来的法律和伦理挑战。 自动驾驶的法律框架 自动驾驶的法律框架是制定和管理自动驾…

前端HTML要了解的知识,DOCTYPE 声明究竟是做什么的、作用是什么?

&#x1f31f;&#x1f31f;&#x1f31f; 专栏详解 &#x1f389; &#x1f389; &#x1f389; 欢迎来到前端开发之旅专栏&#xff01; 不管你是完全小白&#xff0c;还是有一点经验的开发者&#xff0c;在这里你会了解到最简单易懂的语言&#xff0c;与你分享有关前端技术和…

【Vue3】响应式原理

【Vue3】响应式原理 一、问题什么是数据响应式&#xff1f;vue2使用Object.defineProperty实现响应式&#xff1f;Proxy和Reflect1、Proxy2、Reflect3、Proxy和Reflect的使用4、 使用Proxy和Reflect完成响应式 一、问题 1、Vue3的响应式原理和Vue2有什么不同呢&#xff1f; V…

zabbix中文乱码解决方法

1、 问题描述 zabbix在页面中将语言设置为中文后出现乱码问题 监控中文乱码解决方法 1、之前看过一个从Windows里面将本机电脑字体的ttf文件传入服务器中&#xff0c;但是Windows的C&#xff1a;\windows\fonts里面的字体TTF文件可能因为权限的原因无法传到服务器上&#x…

陪诊小程序|陪诊小程序关爱健康,无忧陪伴

随着社会发展和人们生活水平的提高&#xff0c;健康问题成为人们关注的焦点。然而&#xff0c;在就医过程中&#xff0c;许多患者常常感到孤独和无助&#xff0c;缺乏得到家人陪伴的温暖与安慰。为了解决这一问题&#xff0c;我们公司开发了一款创新的陪诊小程序软件&#xff0…

开启机器人学新时代,《机器人学建模、规划与控制》完美诠释未来

机器人学是未来发展的热点领域之一&#xff0c;而在这个领域中&#xff0c;建模、规划与控制则是必不可少的基础技术。今天作者要向大家推荐一本机器人学领域的经典教材——《机器人学建模、规划与控制》。 这本书由西安交通大学出版社出版&#xff0c;作者是机器人学专业的鼎…

JSX的本质

一、本质 React.createElement即h函数&#xff0c;返回vnode第一个参数&#xff0c;可能是组件&#xff0c;也可能是html tag组件名&#xff0c;首字母必须大写&#xff08;React规定&#xff09; 二、babel试一试 &#xff08;babel集成了jsx的编译环境&#xff09; // JSX…

【python海洋专题二十四】南海年平均海流图

【python海洋专题二十四】南海年平均海流图 南海年平均海流图都是些基础图形&#xff0c;但又是重要的&#xff01; 结果展示 关键语句 quiver([X, Y], U, V, [C], **kw)参考资料 图片 Python气象数据处理与绘图(11)&#xff1a;矢量箭头图(风场&#xff0c;通量场) - 简书…

海通国际:颐海国际第三方业务表现承压,关联方收入恢复

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;由于颐海国际&#xff08;01579&#xff09;发布2023年半年报&#xff1a;23H1主营业务收入同比-2.7%至26.16亿元&#xff0c;归母净利润同比36.0%至3.58亿元&#xff0c;海通国际发布关于颐海国际…

如何使用C/C++刷新修改已经打印显示在终端上的内容

写本文的起源是因为在安装一些工具的时候&#xff0c;发现在终端上并行安装的情况下&#xff0c;显示安装信息是会修改之前已经打印出来的内容&#xff0c;这是怎么做到的呢&#xff1f;抱着对这个问题的好奇我进行了一些探索。 终端是如何运行的 首先是最关键的问题&#xf…

一文了解数据管理框架以及数据战略制定方法

这一节主要介绍数据管理这一章的另一重要部分&#xff0c;也就是我们在数据管理经常使用到的数据管理框架以及数据战略制定方法。 要制定数据管理框架&#xff0c;或者是组织需要制定数据治理规划或数据管理规划&#xff0c;需要首先制定与业务战略对齐的数据战略。 01、数据…

图片转base64

图片转 base64 我们将展示如何将图片转换为 base64 编码&#xff0c;并演示如何读取选择的文件并显示在页面中。 base64 编码转换 const a atob("sasd"); // 将 base64 编码转换为原始字符串 console.log(a); // sasdconst b btoa(a); // 将原始字符串转换为 ba…

集结AI创新力量,“华为云杯”2023人工智能应用创新大赛圆满落幕

在AI梦想照进现实的同时&#xff0c;一场历时近三个月的“华为云杯” 2023 人工智能应用创新大赛终于落下帷幕。自6月份启动以来&#xff0c;此次大赛在全国范围内汇聚AI人才、聚焦AI应用场景创新&#xff0c;今年大赛吸引了来自全国各地的5714名优秀精英和153个优秀团队报名参…

00TD时尚儿童穿搭,这件小熊毛衣太好看了吧

寒冷的秋冬季怎么少的了毛衣呢 软糯亲肤又时尚百搭的款谁不爱 除了纯色还有条纹设计 可爱小熊图案可爱又吸睛 经典时尚的款怎么穿都好看哦&#xff01;

二叉树的前 中 后序的非递归实现(图文详解)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…