ESLint的简单使用(js,ts,vue)

news2024/11/20 13:25:27

一、ESLint介绍

1.为什么要用ESLint

统一团队编码规范(命名,格式等)

统一语法

减少git不必要的提交

减少低级错误

在编译时检查语法,而不是等js引擎运行时才检查

2.eslint用法

可以手动下载配置

可以通过vue脚手架创建项目时自动下载

3.ESLint包

安装方式:

通过npm直接进行全局安装npm i eslint -D

通过vue脚手架创建项目时选择安装eslint模块包vue create 创建项目时选择eslint安装的包

vscode中ESLint扩展工具

二、手动下载配置(js)

1.创建一个测试文件夹:eslint-test
2.初始化项目:npm init -y(创建package.json)
3.直接在项目中安装eslint包npm i eslint -D

node_modules中下载了很多包,.bin/eslint.cmd脚本文件,内部通过nodejs执行eslint运行包的代码;@eslint包用来规范eslint配置文件;eslint开头的包是eslint运行包,包含eslint代码。

4.生成ESLint配置文件

创建eslint.config.js文件

export default {
    rules: {
        "no-unused-vars": "error",
        "no-console": "error",
        "no-sparse-arrays": "error",
        "no-undef": "error",
        "no-unreachable": "error",
        "no-dupe-keys": "error"
    }
}

在package.json文件中添加type属性,添加命令 

{
    "name": "eslint-test",
    "version": "1.0.0",
    "main": "index.js",
    "type": "module",
    "scripts": {
        "lint": "eslint ."
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "description": "",
    "dependencies": {
        "eslint": "9.14.0"
    }
}

 创建js文件src/index.js

//不允许变量声明但没有使用no-unused-vars
const name = 'zs'

//不允许打印no-console
console.log('name');

//不允许数组中有空元素no-sparse-arrays
const arr = [1, , 3]

//不允许有未声明的变量no-undef
console.log(afffffff);

//不允许函数return后还有代码no-unreachable
function showFn(toName, fromName) {
    let a = 0;
    return a;
    a = 1
}

//不允许对象有重复的key,no-dupe-keys
const obj = {
    name: 'zs',
    name: 'zs1'
}

 终端执行命令npm run lint规范代码


ESLint可以创建独立的配置文件.eslintrc.js,也可以直接在package.json中配置

a.执行node_modules/.bin文件夹里的eslint脚本来创建配置文件

包含完整脚本路径的命令:'./node_modules/.bin/eslint --init'

也可以用npx来执行npxeslint --init

创建配置文件过程中,需要选择配置

 自动生成eslint.config.mjs文件

eslint.config.mjs
import globals from "globals";
import pluginJs from "@eslint/js";

/** @type {import('eslint').Linter.Config[]} */
export default [
  {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
  {languageOptions: { globals: globals.browser }},
  pluginJs.configs.recommended,
];

创建js文件,输入npx eslint 文件名执行语法检查

5.规范集简化配置npm i@eslint/js
// export default {
//     rules: {
//         "no-unused-vars": "error",
//         "no-console": "error",
//         "no-sparse-arrays": "error",
//         "no-undef": "error",
//         "no-unreachable": "error",
//         "no-dupe-keys": "error"
//     }
// }
//规则集
import js from '@eslint/js'
export default [js.configs.recommended]
三、手动安装eslint(ts)
1.创建一个测试文件夹:eslint-ts-test
2.初始化项目:npm init -y(创建package.json)
3.直接在项目中安装eslint包npm i eslint @eslint/js @typescript-eslint/parser -D
{
    "name": "pro",
    "version": "1.0.0",
    "main": "index.js",
    "type": "module",
    "scripts": {
        "lint": "eslint ."
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "description": "",
    "devDependencies": {
        "@eslint/js": "9.14.0",
        "eslint": "9.14.0",
        "@typescript-eslint/parser": "8.14.0"
    }
}
 4.新建配置文件eslint.config.js文件
import tsPsrser from '@typescript-eslint/parser'

export default {
    //文件配置,哪些文件需要被校验,忽略eslint.config.js文件
    ignores: ["eslint.config.js"],
    files: ["**/*.ts"],
    //规范配置
    rules: {
        "no-unused-vars": "error",
        "no-console": "error"
    },
    //语言配置
    languageOptions: {
        //指定解析器
        parser: tsPsrser
    }
}
 5.创建ts文件,src/index.ts
const age=18
console.log(name)

/*ts类型定义
*ts相关的校验,eslint自带的校验espress解析器无法识别
*我们需要ts解析器来解析ts代码,完成类型校验
*/
interface Uesr{
  name:string;
  age:number;
}

  Parsing error: The keyword 'interface' is reserved

ts相关的校验,eslint自带的校验espress解析器无法识别

我们需要ts解析器来解析ts代码,完成类型校验 npm i @typescript-eslint/parser

四、手动安装eslint(vue)

1.创建一个测试文件夹:eslint-ts-test
2.初始化项目:npm init -y(创建package.json)
3.直接在项目中安装eslint包npm i eslint @eslint/js @typescript-eslint/parser vue-eslint-parser -D
{
    "name": "eslint-test",
    "version": "1.0.0",
    "main": "index.js",
    "type": "module",
    "scripts": {
        "lint": "eslint ."
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "description": "",
    "dependencies": {
        "@eslint/js": "9.14.0",
        "@typescript-eslint/parser": "8.14.0",
        "eslint": "9.14.0",
        "vue-eslint-parser": "9.4.3"
    }
}
 4.新建配置文件eslint.config.js文件
import tsParser from '@typescript-eslint/parser'
import vueParser from 'vue-eslint-parser'
export default {
    ignores: ["eslint.config.js"],
    files: ["**/*.ts", "**/*.vue"],
    rules: {
        "no-unused-vars": "error",
        "no-console": "error",
        "no-sparse-arrays": "error",
        "no-undef": "error",
        "no-unreachable": "error",
        "no-dupe-keys": "error"
    },
    languageOptions: {
        //指定解析器
        parser: vueParser,
        //解析器的语法parser设置
        parserOptions: {
            parser: tsParser
        }
    }
}
 5.创建vue文件,src/index.vue
<template>
    
</template>
<script setup lang="ts">
//不允许变量声明但没有使用no-unused-vars
const name = 'zs'

//不允许打印no-console
console.log('name');

//不允许数组中有空元素no-sparse-arrays
const arr = [1, , 3]

//不允许有未声明的变量no-undef
console.log(afffffff);

//不允许函数return后还有代码no-unreachable
function showFn(toName, fromName) {
    let a = 0;
    return a;
    a = 1
}

//不允许对象有重复的key,no-dupe-keys
const obj = {
    name: 'zs',
    name: 'zs1'
}

//类型定义
interface User{
  name:string;
  age:number;
}
</script>

五、自定义插件

 1.rule定义

针对这个规范的需求,编写一个rule,原理是通过ast节点处理来完成

//规则的本质是一个对象,
//eslint插件,必须长得像一个约定好的对象
export const noMiaomiVars = {
    //插件的元信息
    meta: {
        messages: {
            noMiaomiVars: "不允许使用miaomi变量"
        }
    },
    create(context) {
        return {
            //  这是一个访问者模式,访问到某一个ast的节点,就进行处理
            VariableDeclaration(node) {
                console.log('VariableDeclaration', node);
            },
            VariableDeclarator(node) {
                console.log('VariableDeclarator', node);
            },
            Identifier(node) {
                console.log('Identifier', node);
                if (node.name == 'miaomi') {
                    context.report({
                        node,
                        messageId: 'noMiaomiVars',
                        data: {
                            name: node.name
                        }
                    })
                }
            },
            Literal(node) {
                console.log('Identifier', node);
            }
        }
    }
}
2.plugin插件定义

将rule进行插件化,提供给外部使用‘

import { noMiaomiVars } from '../rules/no-miaomi-vars.js'
export const eslintMiaomiPlugin = {
    rules: {
        "no-miaomi-vars": noMiaomiVars
    }
}
3.use将插件引入到eslint配置文件中,使用插件
import tsParser from '@typescript-eslint/parser'
import vueParser from 'vue-eslint-parser'
import { eslintMiaomiPlugin } from './eslint/plugins/eslint-plugin-miaomi.js'
export default {
    ignores: ["eslint.config.js"],
    files: ["src/**/*.js", "**/*.ts", "**/*.vue"],
    plugins: {
        miaomi: eslintMiaomiPlugin //插件定义好后,插件名称就是规则的作用域
    },
    rules: {
        "miaomi/no-miaomi-vars": "error",
    },
    languageOptions: {
        //指定解析器
        parser: vueParser,
        //解析器的语法parser设置
        parserOptions: {
            parser: tsParser
        }
    }
}

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

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

相关文章

11.19机器学习_逻辑回归

十二 逻辑回归 1.概念 逻辑回归(Logistic Regression)是机器学习中的一种分类模型&#xff0c;逻辑回归是一种分类算法&#xff0c;虽然名字中带有回归&#xff0c;但是它与回归之间有一定的联系。由于算法的简单和高效&#xff0c;在实际中应用非常广泛。 逻辑回归一般用于…

数据结构-树状数组专题(2)

一、前言 接上回树状数组专题&#xff08;1&#xff09;&#xff0c;这次主要介绍差分跟树状数组联动实现区间更新 二、我的模板 重新放了一遍&#xff0c;还是提一嘴&#xff0c;注意下标从0开始&#xff0c;区间左闭右开 template <typename T> struct Fenwick {in…

SAM-Med2D 训练完成后boxes_prompt没有生成mask的问题

之前对着这这篇文章去微调SAM_Med2D(windows环境),发现boxes_prompt空空如也。查找了好长时间问题SAM-Med2D 大模型学习笔记&#xff08;续&#xff09;&#xff1a;训练自己数据集_sam训练自己数据集-CSDN博客 今天在看label2image_test.json文件的时候发现了一些端倪: 官方…

从源头保障电力安全:输电线路动态增容与温度监测技术详解

在电力系统中&#xff0c;输电线路是电能传输的关键环节。然而&#xff0c;当导线温度过高时&#xff0c;会加速导线老化&#xff0c;降低绝缘性能&#xff0c;甚至引发短路、火灾等严重事故&#xff0c;对电网安全运行构成巨大威胁。近日&#xff0c;某地区因持续高温和用电负…

第02章 CentOS基本操作

2.文件基本操作【文件操作&#xff08;一&#xff09;】 目标 理解Linux下路径的表示方法能够使用命令(mkdir和touch)在指定位置创建目录和文件能够使用命令(rm)删除指定的目录和文件能够使用命令(ls)列出目录里的文件能够使用命令(cat,head,tail,less,more)查看文件内容理解标…

leetcode400第N位数字

代码 class Solution {public int findNthDigit(int n) {int base 1;//位数int weight 9;//权重while(n>(long)base*weight){//300n-base*weight;base;weight*10;}//n111 base3 weight900;n--;int res (int)Math.pow(10,base-1)n/base;int index n%base;return String…

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景 公司是非煤采矿业&#xff0c;核心业务是采选&#xff0c;大型设备多&#xff0c;安全风险因素多。当下政府重视安全&#xff0c;头部技术企业的安全解决方案先进但价格不低&#xff0c;作为民营企业对安全投入的成本很敏感。利用我本身所学&#xff0c;准备搭建公司的…

【AI人脸工具整合包及教程】Rope——重新定义你的数字形象!

引言 在这个数字时代&#xff0c;个人形象的重要性不言而喻。无论是社交媒体上的个人展示&#xff0c;还是商业活动中的品牌塑造&#xff0c;一个独特的形象都能让人眼前一亮。随着技术的发展&#xff0c;AI人脸技术逐渐从科幻走向现实&#xff0c;成为普通人也能轻松触及的技…

NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息&#xff1a; 简介: 本文讨论的背景是大型语言模型&#xff08;LLMs&#xff09;的自我对齐问题。传统的LLMs对齐方法依赖于昂贵的训练和人类偏好注释&am…

java CAS详解

java 中CAS是如何实现的&#xff1f; 在 Java 中&#xff0c;实现 CAS&#xff08;Compare-And-Swap, 比较并交换&#xff09;操作的一个关键类是Unsafe。 Unsafe类位于sun.misc包下&#xff0c;是一个提供低级别、不安全操作的类。由于其强大的功能和潜在的危险性&#xff0…

Gooxi受邀参加海通证券AI+应用生态大会,助力数智金融高质量发展

11月15日&#xff0c;由海通证券举办以”智算无界&#xff0c;共臻高远”为主题AI应用生态大会在上海圆满落幕。此次活动汇聚了众多人工智能领域的意见领袖、专家学者、优秀企业代表及资深投资人&#xff0c;共同探讨金融行业人工智能应用的前沿理论、最佳实践及发展趋势&#…

Python数据分析与可视化实验案例,所需数据已经绑定上传

大数据技术专业技能竞赛试卷 一、项目名称 农业肥料登记数据分析赛题 二、竞赛内容 赛项以大数据技术为核心内容&#xff0c;重点考查参赛选手数据清洗和数据分析的能力&#xff0c;结合Pandas和matplotlib图表展示数据。所有参赛学生在现场根据给定的项目任务&#xff0c;…

【竞技宝】LOL-传奇杯:姿态飞机TP绕后一锤定音

北京时间2024年11月19日,英雄联盟第二届传奇杯正在如火如荼的进行之中。昨天迎来小组赛第四个比赛日,本日一共进行了七场小组赛的对决,那么在昨日上半场的四场比赛中,登场的各支队伍都取得了什么样的表现呢?接下来小宝为大家带来小组赛day4上半场的比赛战报。 OP(宁王队) 0-1 …

qt之telnet连接目标设备在线调试功能

一、前言 在QT下使用telnet连接目标设备&#xff0c;进行在线命令调试&#xff0c;也可配合ftp或ssh使用。 telnet某些库在qt5下不可用&#xff0c;无法获取登录信息&#xff0c;只能获取到连接信息&#xff0c;这里我用自己的方式判断是否成功登录 二、环境 window qt5.7…

Android中常见内存泄漏的场景和解决方案

本文讲解Android 开发中常见内存泄漏场景及其解决方案&#xff0c;内容包括代码示例、原因分析以及最佳实践建议。 1. 静态变量导致的内存泄漏 静态变量的生命周期与应用进程一致&#xff0c;如果静态变量持有了对 Activity 或其他大对象的引用&#xff0c;就可能导致内存泄漏…

红外相机和RGB相机外参标定 - 无需标定板方案

1. 动机 在之前的文章中红外相机和RGB相机标定&#xff1a;实现两种模态数据融合_红外相机标定-CSDN博客 &#xff0c;介绍了如何利用标定板实现外参标定&#xff1b;但实测下来发现2个问题&#xff1a; &#xff08;1&#xff09;红外标定板尺寸问题&#xff0c;由于标定板小…

即插即用篇 | YOLOv11 引入高效的直方图Transformer模块 | 突破天气障碍:Histoformer引领高效图像修复新路径

本改进已同步到YOLO-Magic框架&#xff01; 摘要&#xff1a;摘要。基于Transformer的恶劣天气图像修复方法取得了显著进展。大多数方法通过沿通道维度或在空间上固定范围的块内使用自注意力&#xff0c;以减少计算负担。然而&#xff0c;这种折中方式在捕获长距离空间特征方面…

ITSS服务经理: 山西科技学院智能铸造现代产业学院揭牌

记者从山西科技学院传来喜讯&#xff0c;近日&#xff0c;在该院工程训练中心与智能铸造现代产业学院于山西省晋城市泽州县绿色智能铸造创新产业园隆重举行的揭牌启动仪式上&#xff0c;标志着学院迈入崭新篇章。应用型本科高校&#xff0c;作为孕育高素质应用人才的摇篮&#…

AI时代:弯道超车的新思维与实践路径

文章目录 一、AI时代的机遇与挑战二、重新认识AI三、弯道超车的新思维四、实践路径与案例分享五、AI技术的未来发展趋势六、个人与企业如何适应AI时代《AI时代&#xff1a;弯道超车新思维》内容简介作者简介目录 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#…

‘视’不可挡:OAK相机助力无人机智控飞行!

南京邮电大学通达学院的刘同学用我们的oak-d-lite实现精确打击无人机的避障和目标识别定位功能&#xff0c;取得了比赛冠军。我们盼望着更多的朋友们能够加入到我们OAK的队伍中来&#xff0c;参与到各式各样的比赛中去。我们相信&#xff0c;有了我们相机的助力&#xff0c;大家…