Vue3脚手架实现(七、渲染eslint配置)

Vue3脚手架实现(一、整体介绍)

Vue3脚手架实现(二、项目环境搭建)

Vue3脚手架实现(三、命令行读取配置)

Vue3脚手架实现(四、模板渲染流程、渲染一个基础项目)

Vue3脚手架实现(五、渲染jsx和prettier配置)

Vue3脚手架实现(六、渲染router和pinia)

Vue3脚手架实现(七、渲染eslint配置)

eslint的渲染,我看的相关的create-vue源码中,使用了@vue/create-eslint-config这个包

我们这里直接自己写ejs来进行渲染吧,这样方便自己随意控制

有关eslint可以先看下 eslint官网

eslint配置初识

可以通过eslint生成相关的配置npm init @eslint/config@latest,选择的配置如下

  • 没有ts配置
    • 选取配置

    • eslint.config.mjs

      php 复制代码
      import js from "@eslint/js";
      import globals from "globals";
      import pluginVue from "eslint-plugin-vue";
      import { defineConfig } from "eslint/config";
      
      export default defineConfig([
        { files: ["**/*.{js,mjs,cjs,vue}"], plugins: { js }, extends: ["js/recommended"] },
        { files: ["**/*.{js,mjs,cjs,vue}"], languageOptions: { globals: globals.browser } },
        pluginVue.configs["flat/essential"],
      ]);
    • package.json中的依赖有 "devDependencies": { "@eslint/js": "^9.30.1", "eslint": "^9.30.1", "eslint-plugin-vue": "^10.3.0", "globals": "^16.3.0" }

  • 有ts配置
    • 配置选择

    • eslint.config.mjs import js from "@eslint/js"; import globals from "globals"; import tseslint from "typescript-eslint"; import pluginVue from "eslint-plugin-vue"; import { defineConfig } from "eslint/config";

      php 复制代码
      export default defineConfig([
        { files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], plugins: { js }, extends: ["js/recommended"] },
        { files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], languageOptions: { globals: globals.browser } },
        tseslint.configs.recommended,
        pluginVue.configs["flat/essential"],
        { files: ["**/*.vue"], languageOptions: { parserOptions: { parser: tseslint.parser } } },
      ]);
    • package.json中的依赖有 "devDependencies": { "@eslint/js": "^9.30.1", "eslint": "^9.30.1", "eslint-plugin-vue": "^10.3.0", "globals": "^16.3.0", "typescript-eslint": "^8.35.1" }

我们可以抽离一下相关的配置,对于eslint的配置,我们单开一个eslint文件夹进行管理。对于eslint的配置base文件夹就是最基础渲染的配置,如果有typescript配置,我们就在一个typescript文件夹中进行管理。

eslint基础配置

  • 相关.vscode配置template\config\eslint\.vscode\

    • extensions.json:插件推荐

      json 复制代码
      {
        "recommendations": ["dbaeumer.vscode-eslint"]
      }
    • settings.json:仅修复工具明确声明可自动修复的问题

      json 复制代码
      {
        "editor.codeActionsOnSave": {
          "source.fixAll": "explicit"
        }
      }
  • 基础配置:template\eslint\base

    • package.json:我们添加基础的依赖,以及lint命令

      perl 复制代码
      {
        "scripts": {
          "lint": "eslint . --fix"
        },
        "devDependencies": {
          "@eslint/js": "^9.30.1",
          "eslint": "^9.30.1",
          "eslint-plugin-vue": "^10.3.0",
          "globals": "^16.3.0"
        }
      }
    • eslint.config.mjs.ejs

      arduino 复制代码
      import js from '@eslint/js';
      import globals from 'globals';
      import { defineConfig } from 'eslint/config';
      <%_ for (const { importer } of importerList) { _%>
      <%- importer %>
      <%_ } _%>
      
      export default defineConfig([
        <%_ for (const { config } of configList) { _%>
        <%- config %>
        <%_ } _%>
      ])
    • eslint.config.mjs.data.mjs

      arduino 复制代码
      export default function getData() {
        return {
          importerList: [
            {
              id: 'pluginVue',
              importer: "import pluginVue from 'eslint-plugin-vue'",
            },
          ],
          configList: [
            {
              id: 'pluginJs',
              config:
                "{ files: ['**/*.{js,mjs,cjs,vue}'], plugins: { js }, extends: ['js/recommended'] },",
            },
            {
              id: 'globals',
              config:
                "{ files: ['**/*.{js,mjs,cjs,vue}'], languageOptions: { globals: globals.browser } },",
            },
            {
              id: 'pluginVue',
              config: "pluginVue.configs['flat/essential']",
            },
          ],
        }
      }
  • 在index.ts中加入相关代码

scss 复制代码
const create = async (name: string, options: Options) => {
  ...
  if (needsPinia) {
    render('config/pinia')
  }
  if (needsEslint) {
    render('config/eslint')
    render('eslint/base') // eslint基础配置
  }
  ...
}

有typescript的情况下的eslint配置

有prettier的情况下的eslint配置

相关推荐
望道同学25 分钟前
PMP/信息系统项目管理师 9 张 思维导图【考试必备】
前端·后端·程序员
局i1 小时前
Vue 中 v-text 与 v-html 的区别:文本渲染与 HTML 解析的抉择
前端·javascript·vue.js
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot+vue的学校课程管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
fruge1 小时前
接口 Mock 工具对比:Mock.js、Easy Mock、Apifox 的使用场景与配置
开发语言·javascript·ecmascript
菜鸟冲锋号2 小时前
问题:增量关联(实时同步新数据) 这个场景中,如果hudi_pay 变更了一条数据,hudi_order_pay_join 结果的数据会跟着变化吗
服务器·前端·数据库
贩卖黄昏的熊2 小时前
typescript 快速入门
开发语言·前端·javascript·typescript·ecmascript·es6
拾柒SHY2 小时前
XSS-Labs靶场通关
前端·web安全·xss
前端婴幼儿2 小时前
前端主题切换效果
前端
一 乐2 小时前
水果销售|基于springboot + vue水果商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
JIngJaneIL2 小时前
校园任务平台|校园社区系统|基于java+vue的校园悬赏任务平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园任务平台