vite5+eslint踩坑

vite5+eslint踩坑

Configure File

使用 eslintrc.cjs 替代 eslintrc.js

由于 vite 中 package.json 声明了 "type": "module",即表明项目下所有 js 遵循 ES Module 模块规范,那么你的 eslintrc.js 要求ESM方式配置,而不是下面的CommonJs

js 复制代码
module.exports = {
  ...
}

如果可以,你可以修改为ESM 规范,但大多数情况你的eslint依赖遵循CommonJs,所以最佳处理:使用 eslintrc.cjs 替代 eslintrc.js,明确告知此文件遵循commonJs模块规范

vite-plugin-eslint

使用 vite-plugin-eslint 替代 @rollup/plugin-eslint

即使 vite 支持 rollup 插件,但部分vite特性的规则 可能导致 rollup 插件无法理解;

如 项目中添加windiCSS 支持,会有如下代码

js 复制代码
import "virtual:windi.css";

此时 @rollup/plugin-eslint 报错:无法找到No configuration file in @windi.css

因为 virtual: 是vite规定的虚拟模块规则,@rollup/plugin-eslint 没有对此进行正确处理,采用专为 vite 支持的 vite-plugin-eslint 即可解决

GitHub - gxmari007/vite-plugin-eslint: 🚨 ESLint plugin for vite

Vue3 setup

在SFC的vue3单文件组件组件中,使用 setup 语法糖编写代码:

vue 复制代码
<script setup>
  ...
</script>

eslint报错:

css 复制代码
[plugin:vite-plugin-eslint] 
error  Parsing error: This experimental syntax requires enabling one of the following parser plugin(s): 
"jsx", "flow", "typescript". (1:0)

eslint 默认检查规则不包含 Vue3 SFC 单文件组件语法,无法对.vue文件进行检验

为你的 eslint 新增 extend:@vitejs/plugin-vue

js 复制代码
extends: [
  "eslint:recommended",
  "plugin:vue/vue3-recommended", // 此处使用推荐rules,还可选 plugin:vue/vue3-essential
  "plugin:prettier/recommended",
],

使用说明:User Guide | eslint-plugin-vue

eslint parser 冲突

如果你使用 eslint-plugin-vue,但你的 eslintrc.js 中自定义了eslint parser

js 复制代码
module.exports = {
  root: true,
  parser: "@babel/eslint-parser", // 指定了 parser
  parserOptions: {
    ...
  }
}

这依旧会报错,因为你的parser配置覆盖了eslint-plugin-vue 的parser配置:@typescript-eslint/parser

你需要调整为

js 复制代码
parserOptions: {
  parser: "@babel/eslint-parser", // 在parserOptions内指定 parser
},

更多细节详见 User Guide | eslint-plugin-vue How to use a custom parser? 章节

示例

最后贴下我的 eslintrc.cjs 配置供参考,都是基础规则支持,可根据实际改用其它eslint extend或自定义 rules

js 复制代码
module.exports = {
  root: true,
  parserOptions: {
    parser: "@babel/eslint-parser",
    ecmaVersion: 2019,
    sourceType: "module",
    ecmaFeatures: {
      globalReturn: false,
      impliedStrict: true,
      jsx: true,
    },
    requireConfigFile: false,
    allowImportExportEverywhere: false,
  },
  env: {
    browser: true,
    node: true,
    commonjs: true,
    es6: true,
    jquery: true,
  },
  extends: [
    "eslint:recommended",
    "plugin:vue/vue3-recommended",
    "plugin:prettier/recommended",
  ],
  rules: {
    "prettier/prettier": "warn",
  },
};
相关推荐
景天科技苑4 小时前
【vue3+vite】新一代vue脚手架工具vite,助力前端开发更快捷更高效
前端·javascript·vue.js·vite·vue项目·脚手架工具
niech_cn2 天前
vite + vue3 + ts解决别名引用@/api/user报错找不到相应的模块
vite
Amd7944 天前
Nuxt.js 应用中的 vite:compiled 事件钩子
自定义·vite·编译·nuxt·热更新·性能·钩子
黑色的糖果4 天前
npm上传自己封装的插件(vue+vite)
前端·vue.js·npm·vite
软件小伟5 天前
Vite是什么?Vite如何使用?相比于Vue CLI的区别是什么?(一篇文章帮你搞定!)
前端·vue.js·ecmascript·vite·vue vli
Amd7945 天前
Nuxt.js 应用中的 vite:serverCreated 事件钩子
中间件·开发·vite·日志·nuxt·跨域·钩子
亦世凡华、5 天前
React--》如何高效管理前端环境变量:开发与生产环境配置详解
react·vite·环境变量·env·env配置
19组清风6 天前
对于模块动态加载,Vite 内部做了哪些优化
前端·vite·前端工程化
Amd7946 天前
Nuxt.js 应用中的 vite:configResolved 事件钩子
vite·配置·nuxt·构建·钩子·动态·调整