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配置

相关推荐
天渺工作室12 小时前
实现一个adblock/adblock plus等浏览器广告拦截器检测插件
前端·javascript
阳光是sunny12 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
ZhengEnCi12 小时前
Q04-Vite禁用CSS代码分割-解决生产环境样式加载顺序混乱问题
前端·vue.js·vite
九酒13 小时前
AI Agent 开发踩坑记:口播功能非得用 APP 原生实现吗?
前端·人工智能·agent
Jackson__13 小时前
做了一段时间的AI coding后,我终于搞清了 CLI 和 MCP 的区别
前端·agent·ai编程
IT_陈寒16 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
用户479492835691517 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
薛定喵的谔18 小时前
我开源了一个精致的 Next.js 博客模板:Skyplume
前端·前端框架·next.js
张龙68719 小时前
构建生产级 AI Agent:工具调用与记忆架构实战指南
前端
kyriewen20 小时前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js