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

相关推荐
奕辰杰4 小时前
关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案
前端·npm·node.js
JiaLin_Denny5 小时前
如何在NPM上发布自己的React组件(包)
前端·react.js·npm·npm包·npm发布组件·npm发布包
_Kayo_6 小时前
VUE2 学习笔记14 nextTick、过渡与动画
javascript·笔记·学习
路光.6 小时前
触发事件,按钮loading状态,封装hooks
前端·typescript·vue3hooks
我爱996!6 小时前
SpringMVC——响应
java·服务器·前端
咔咔一顿操作7 小时前
Vue 3 入门教程7 - 状态管理工具 Pinia
前端·javascript·vue.js·vue3
kk爱闹7 小时前
用el-table实现的可编辑的动态表格组件
前端·vue.js
漂流瓶jz8 小时前
JavaScript语法树简介:AST/CST/词法/语法分析/ESTree/生成工具
前端·javascript·编译原理
换日线°8 小时前
css 不错的按钮动画
前端·css·微信小程序