以 Vue 项目为例串联eslint整个流程

一、项目创建阶段的配置初始化

1. Vue CLI 中的 ESLint 集成

当运行 vue create my-project 并选择 ESLint 时:

csharp 复制代码
# 内部执行流程
vue create → 调用 eslint --init → 生成 Vue 专用配置

2. 自动生成的 Vue 配置

java 复制代码
// .eslintrc.js
module.exports = {
  env: { browser: true, es2021: true },
  extends: [
    'plugin:vue/essential', // Vue 特有规则
    'eslint:recommended'    // ESLint 推荐规则
  ],
  parserOptions: { 
    ecmaVersion: 12, 
    sourceType: 'module',
    parser: 'babel-eslint'  // 支持 ES 新特性
  },
  plugins: ['vue'],         // Vue 插件
  rules: {
    'vue/multi-word-component-names': 'off' // 关闭单名单词组件警告
  }
};

3. 依赖自动安装

Vue CLI 会自动安装所需依赖:

json 复制代码
{
  "devDependencies": {
    "eslint": "^8.0.0",
    "eslint-plugin-vue": "^9.0.0",
    "babel-eslint": "^10.1.0"
  }
}

二、开发阶段的实时检查

1. 编辑器集成原理

VSCode ESLint 插件的工作机制:

markdown 复制代码
// 编辑保存时触发
1. 获取当前文件内容
2. 执行: eslint --stdin --stdin-filename App.vue
3. 传输内容到标准输入
4. 获取并显示检查结果

2. Vue 单文件组件的特殊处理

对于 .vue 文件,ESLint 需要:

markdown 复制代码
1. 使用 vue-eslint-parser 解析器
2. 分离 template/script/style 三部分
3. 对每部分应用相应规则
4. 合并结果显示

三、构建前的质量检查

1. package.json 中的检查脚本

json 复制代码
{
  "scripts": {
    "lint": "eslint --ext .js,.vue src",  // 实际调用 node_modules/.bin/eslint
    "lint:fix": "npm run lint -- --fix"
  }
}

2. 完整的检查流程

当运行 npm run lint 时:

  1. npm run lint 触发命令
  2. npm 会在 node_modules/.bin 中查找 eslint(Windows 执行 .cmd,Unix 执行无后缀脚本)
  3. 通过符号链接定位到 node_modules/eslint/bin/eslint.js
  4. 执行该文件(首行 #!/usr/bin/env node 告诉系统用 Node.js 运行)
  5. 检查无特殊参数,走默认模式,调用cli.execute
  6. 加载配置,遍历vue文件,解析并检查规则,输出结果

3. 自动修复机制

xml 复制代码
// --fix 的工作流程
1. 检测可自动修复的问题
2. 应用修复规则生成新代码
3. 写回原文件(需磁盘权限)
4. 输出修复统计信息

// Vue 模板修复示例
<template>
  <!-- 修复前 -->
  <div v-if="show" v-if="error"/> 
  <!-- 修复后 -->
  <div v-if="show"/>
</template>

四、提交前的强制验证

1. Git Hooks 集成

通过 husky + lint-staged 实现提交前检查:

json 复制代码
{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,vue}": ["eslint --fix", "git add"]
  }
}

2. CI/CD 流水线检查

在 GitHub Actions 中的配置示例:

yaml 复制代码
name: ESLint Check
on: [push, pull_request]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: npm ci
    - run: npm run lint
相关推荐
天蓝色的鱼鱼9 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping9 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
石金龙10 小时前
[译] Composition in CSS
前端·css
白水清风10 小时前
微前端学习记录(qiankun、wujie、micro-app)
前端·javascript·前端工程化
Ticnix10 小时前
函数封装实现Echarts多表渲染/叠加渲染
前端·echarts
用户221520442780010 小时前
new、原型和原型链浅析
前端·javascript
阿星做前端10 小时前
coze源码解读: space develop 页面
前端·javascript
叫我小窝吧10 小时前
Promise 的使用
前端·javascript
NBtab10 小时前
Vite + Vue3项目版本更新检查与页面自动刷新方案
前端
天天扭码11 小时前
来全面地review一下Flex布局(面试可用)
前端·css·面试