首页 > 其他分享 >vue3 ts 项目增加eslint插件实现命令行报错提示和vscode 报错提示,eslint 最新版本9.x多 2024年

vue3 ts 项目增加eslint插件实现命令行报错提示和vscode 报错提示,eslint 最新版本9.x多 2024年

时间:2024-07-21 18:09:03浏览次数:15  
标签:vue off 提示 报错 eslint import true vite

快速开始

  • 安装eslint
yarn add eslint  -D
  • 然后运行初始化eslint
npx eslint --init

image

  • 接着上面命令会自动生成一个新文件eslint.config.js
    eslint.config.js
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";


export default [
  {files: ["**/*.{js,mjs,cjs,ts,vue}"]},
  {languageOptions: { globals: globals.browser }},
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs["flat/essential"],
  {files: ["**/*.vue"], languageOptions: {parserOptions: {parser: tseslint.parser}}},
];

完善后的eslint.config.js 代码:

/*
 * @Author: jocongmin [email protected]
 * @Date: 2024-07-21 15:51:26
 * @LastEditors: jocongmin [email protected]
 * @LastEditTime: 2024-07-21 17:39:24
 * @FilePath: \vue3-init\eslint.config.js
 * @Description:
 *
 * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
 */
import globals from 'globals'
import pluginJs from '@eslint/js'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'

import { readFile } from 'node:fs/promises'
/**
 * 由于安装了autoimport 插件,所以,需要引入.eslintrc-auto-import.json 来完善eslint以免不必要的报错
 * 如果没有使用autoimport ,就不需要引入了
 * @description: 
 * @return {*}
 */
const autoImportFile = new URL('./.eslintrc-auto-import.json', import.meta.url)
const autoImportGlobals = JSON.parse(await readFile(autoImportFile, 'utf8'))

export default [
  { files: ['**/*.{js,mjs,cjs,ts,vue,tsx}'] },
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
        ...autoImportGlobals.globals,
      },
    },
  },
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs['flat/essential'],
  {
    files: ['**/*.vue'],
    languageOptions: { parserOptions: { parser: tseslint.parser } },
  },
  {
    rules: {
      // eslint(https://eslint.bootcss.com/docs/rules/)
      'no-var': 'off', // 要求使用 let 或 const 而不是 var
      'no-multiple-empty-lines': ['off', { max: 1 }], // 不允许多个空行
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-unexpected-multiline': 'off', // 禁止空余的多行
      'no-useless-escape': 'off', // 禁止不必要的转义字符
      'prefer-const': 'off', // 关闭没有使用const的报错

      // typeScript (https://typescript-eslint.io/rules)
      '@typescript-eslint/no-unused-vars': 'off', // 禁止定义未使用的变量
      '@typescript-eslint/no-multiple-empty-lines': 'off', // 禁止定义未使用的变量
      '@typescript-eslint/no-var': 'off', // 禁止定义未使用的变量
      '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
      '@typescript-eslint/prefer-const': 'off', // 关闭没有使用const的报错
      '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
      '@typescript-eslint/no-non-null-assertion': 'off',
      '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间。
      '@typescript-eslint/semi': 'off',

      // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
      'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
      'vue/script-setup-uses-vars': 'off', // 防止<script setup>使用的变量<template>被标记为未使用
      'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
      'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
    },
  },
]


.eslintrc-auto-import.json

{
  "globals": {
    "Component": true,
    "ComponentPublicInstance": true,
    "ComputedRef": true,
    "EffectScope": true,
    "ExtractDefaultPropTypes": true,
    "ExtractPropTypes": true,
    "ExtractPublicPropTypes": true,
    "InjectionKey": true,
    "PropType": true,
    "Ref": true,
    "VNode": true,
    "WritableComputedRef": true,
    "computed": true,
    "createApp": true,
    "customRef": true,
    "defineAsyncComponent": true,
    "defineComponent": true,
    "effectScope": true,
    "getCurrentInstance": true,
    "getCurrentScope": true,
    "h": true,
    "inject": true,
    "isProxy": true,
    "isReactive": true,
    "isReadonly": true,
    "isRef": true,
    "markRaw": true,
    "nextTick": true,
    "onActivated": true,
    "onBeforeMount": true,
    "onBeforeRouteLeave": true,
    "onBeforeRouteUpdate": true,
    "onBeforeUnmount": true,
    "onBeforeUpdate": true,
    "onDeactivated": true,
    "onErrorCaptured": true,
    "onMounted": true,
    "onRenderTracked": true,
    "onRenderTriggered": true,
    "onScopeDispose": true,
    "onServerPrefetch": true,
    "onUnmounted": true,
    "onUpdated": true,
    "provide": true,
    "reactive": true,
    "readonly": true,
    "ref": true,
    "resolveComponent": true,
    "shallowReactive": true,
    "shallowReadonly": true,
    "shallowRef": true,
    "toRaw": true,
    "toRef": true,
    "toRefs": true,
    "toValue": true,
    "triggerRef": true,
    "unref": true,
    "useAttrs": true,
    "useCssModule": true,
    "useCssVars": true,
    "useLink": true,
    "useRoute": true,
    "useRouter": true,
    "useSlots": true,
    "watch": true,
    "watchEffect": true,
    "watchPostEffect": true,
    "watchSyncEffect": true,
    "IObject": true
  }
}

有自己注册的全局方法,也可以写上面.eslintrc-auto-import.json

  • package.json 加入eslint命令lint
"scripts": {
	"dev": "vite",
	"build": "vite build",
	"lint": "eslint src",
	"preview": "vite preview"
},
  • yarn run lint 可以控制台查看代码错误问题

image

总结

上面只是为了实现可以控制台查看eslint的报错提示。

vscode eslint 提示错误实现

需要安装eslint 插件

  • 效果
    image

  • 安装好eslint后,设置里面开启eslint功能
    image

eslint 开启后会根据eslint.config.js 中的配置进行对应错误提示

vscode setting.json 配置参考

image

{
    // tab 大小为2个空格
    "editor.tabSize": 2,
    // 100 列后换行
    "editor.wordWrapColumn": 100,
    // 保存时格式化
    "editor.formatOnSave": true,
    // 开启 vscode 文件路径导航
    "breadcrumbs.enabled": true,
    // prettier 设置语句末尾不加分号
    "prettier.semi": false,
    // prettier 设置强制单引号
    "prettier.singleQuote": true,
    // 选择 vue 文件中 template 的格式化工具
    // 显示 markdown 中英文切换时产生的特殊字符
    "editor.renderControlCharacters": true,
    // eslint 检测文件类型
    "eslint.validate": [
        "vue",
        "html",
        "javascript",
        "typescript",
        "javascriptreact",
        "typescriptreact"
    ],
    "[vue]": {
        "editor.defaultFormatter": "dbaeumer.vscode-eslint"
    },
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    },
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[json]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[typescript]": {
        "editor.defaultFormatter": "dbaeumer.vscode-eslint"
    },
    "eslint.format.enable": true,
    "[jsonc]": {
        "editor.defaultFormatter": "HookyQR.beautify"
    },
    "editor.fontSize": 14,
    "[css]": {
        "editor.defaultFormatter": "HookyQR.beautify"
    },
    "workbench.startupEditor": "none",
    "diffEditor.ignoreTrimWhitespace": false,
    "editor.accessibilitySupport": "off",
    "git.openRepositoryInParentFolders": "never",
    "eslint.codeAction.showDocumentation": {
        "enable": false
    },
    "eslint.codeActionsOnSave.rules": null,
}

vite加入编译eslint错误提示

  • 需要安装
yarn add vite-plugin-eslint
  • vite.config.js 配置参考
    image
/*
 * @Author: jocongmin [email protected]
 * @Date: 2024-06-02 21:00:27
 * @LastEditors: jocongmin [email protected]
 * @LastEditTime: 2024-07-21 17:30:36
 * @FilePath: \vue3-init\vite.config.js
 * @Description:
 *
 * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
 */
import { fileURLToPath, URL } from 'node:url'
import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'

import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import VueDevTools from 'vite-plugin-vue-devtools'

import eslint from 'vite-plugin-eslint'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    eslint({
      // 配置选项
      cache: false, // 禁用缓存
    }),
    AutoImport({
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ['vue', 'vue-router'],
      // 生成自动导入的TS声明文件
      dts: 'types/auto-import.d.ts', //这个文件会自动生成
      eslintrc: {
        enabled: false, // Default `false`
        filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
        globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
      },
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [
        ElementPlusResolver(),
        // 引入 ant-design-vue 图标
        IconsResolver({
          enabledCollections: ['ep'],
        }),
      ],
      dts: false,
    }),
    // 引入 iconfont
    Icons({
      autoInstall: true,
    }),
    VueDevTools(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

参考补充

package.json

{
  "name": "vue3-init",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint src",
    "fix": "eslint src --fix",
    "preview": "vite preview"
  },
  "dependencies": {
    "@types/lodash": "^4.17.5",
    "FileSaver": "^0.10.0",
    "ailabel": "^5.1.15",
    "element-plus": "^2.7.6",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-prettier": "^5.2.1",
    "file-saver": "^2.0.5",
    "lodash": "^4.17.21",
    "mockjs": "^1.1.0",
    "pinia": "^2.1.7",
    "prettier": "^3.3.3",
    "sass": "^1.77.6",
    "typescript": "^5.5.3",
    "unplugin-auto-import": "^0.17.6",
    "unplugin-element-plus": "^0.8.0",
    "unplugin-icons": "^0.19.0",
    "unplugin-vue-components": "^0.27.2",
    "vite-plugin-eslint": "^1.8.1",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0",
    "xlsx": "^0.18.5"
  },
  "devDependencies": {
    "@eslint/js": "^9.7.0",
    "@iconify-json/ep": "^1.1.15",
    "@typescript-eslint/eslint-plugin": "^7.16.1",
    "@typescript-eslint/parser": "^7.16.1",
    "@vitejs/plugin-vue": "^5.0.4",
    "@vitejs/plugin-vue-jsx": "^4.0.0",
    "eslint": "9.x",
    "eslint-plugin-vue": "^9.27.0",
    "globals": "^15.8.0",
    "typescript-eslint": "^7.16.1",
    "vite": "^5.2.8",
    "vite-plugin-vue-devtools": "^7.0.25"
  }
}

标签:vue,off,提示,报错,eslint,import,true,vite
From: https://www.cnblogs.com/jocongmin/p/18314758

相关文章

  • 记录 OpenWrt 执行 opkg update 命令报错 Failed to download,但是换源无效且源用浏览
    记录OpenWrt执行opkgupdate命令报错Failedtodownload,但是换源无效且源用浏览器可访问的解决方案解决方法首先给出解决方法:)网络-->接口-->WAN-->编辑-->高级设置取消勾选“自动获取DNS服务器”-->在使用自定义的DNS服务器一栏中添加并输入可用的DNS地址。......
  • Delphi皮肤控件AlphaControls去NAG提示
    国外知名皮肤控件AlphaControls,一些好看的皮肤会弹出对话框....用查找句柄的方法去发消息关闭对话框,都不得行...,以为是屏敝了消息,自定义消息也失效。后面用修改内存地址指令的方法,就可以有效的去掉NAG提示functionFindPattern(ProcessHandle:THandle;StartAddr,EndAddr:D......
  • DSPy:提示词工程师的“终章”?
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:伴随AI应用的广泛推广与普及,人们逐渐意识到,提示词工程绝非万能的艺术抑或科学,它并非对所有问题的提示策略都行之有效,只有部分提示语在孤立情形下看似优良,然而在综合运用时却难担重任。并且,每当大模型平台的某......
  • 解决.Net Framework3.5安装报错0x80070490
    .NETFramework是Windows平台下的软件框架,包括1.0~4.8多个版本,向下兼容。Win7默认安装的是3.5版,早期Win10版本默认安装的4.6版,本文分享如何在Win10和Win11上离线安装.NETFramework3.5,并解决安装报0x80070490找不到元素的错误。问题描述在早些年,有的软件安装时强制验证.NETFr......
  • net core中使用jwt时,提示DenyAnonymousAuthorizationRequirement: Requires an authe
    客户端请求是401,控制台提示info:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]Authorizationfailed.Theserequirementswerenotmet:DenyAnonymousAuthorizationRequirement:Requiresanauthenticateduser.翻遍了资料,也查不到原因,......
  • Java Swing Loading转圈的进度提示框
    JavaSwingLoading转圈的进度提示框具体只需要两个类AnimatedPanel.javaInfiniteProgressPanel.java 前因:我们开发的web应用,有个奇葩的需求,需要客户触发到客户端与第三方交互的地方加个Loading效果,已经脱离了web程序页面交互范围了,只是通过socket进行通信交互......
  • UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xb5‘ in position
    报错UnicodeEncodeError是由于文件写入过程中编码格式不匹配导致的。为了避免这种问题,可以显式指定使用UTF-8编码来写入文件。以下是修改后的代码,确保在写入HTML文件时使用UTF-8编码:importnumpyasnpimportpandasaspdfromsklearn.datasetsimportload_iri......
  • 新用户使用sudo命令报错
    新用户使用sudo命令报错情景:使用adduserimage,创建新用户image使用suimage,切换到新用户使用sudo命令,出现报错imageisnotinthesudoersfile.Thisincidentwillbereported.解决方案:切换到root用户:su-两种方法(任选其一)方法一:输入如下指令,将......
  • win10访问共享打印机提示0x0000011b错误原因分析及解决方法
          2024年十大技术难题之“共享打印机报0x0000011b错误”该问题一直存在,该问题是由于Win10更新补丁后大面积出现打印机无法共享。即使目前最新的Win1022h2镜像还是没有修复打印机共享BUG,虽然微软发布了最新更新补丁,越更新越有问题。不过此工具可以修复最近出现......
  • Win11系统提示找不到LocationWinPalMisc.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个LocationWinPalMisc.dll文件(挑选合适的版本......