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

相关推荐
人工智能训练43 分钟前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪1 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9222 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233223 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88214 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1364 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠4 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_949833394 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
珑墨5 小时前
【Turbo】使用介绍
前端
军军君015 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three