三十的博客

现代前端工程化实战:Vite+Vue3 规范配置手册(含完整配置文件)

本文内容基于 AI 生成结果整理,可能包含不准确信息,仅供参考使用。
发布时间
最后更新
阅读量 加载中...

介绍下这些工具

1. ESlint

ESLint 是一个开源的 JavaScript 代码检查工具,用于识别和报告代码中的问题模式,帮助开发者保持代码风格一致并避免潜在错误。

核心价值

  1. ​ 错误预防:​ 在运行前发现语法错误和潜在问题
  2. ​ 代码规范 ​: 强制执行团队约定的编码风格
  3. ​ 最佳实践 ​: 推广行业认可的最佳实践
  4. ​ 自动修复 ​: 支持自动修复部分问题(通过 –fix 选项)

2. Stylelint

Stylelint 是现代前端开发中不可或缺的样式表检查工具,专为 Css/Scss/Less 等预处理器设计,提供超过 170 条内置规则,可帮助团队维护一致的样式代码风格并避免错误。

核心特性

  1. ​ 多预处理器支持 ​: 原生支持 CSS/SCSS/Sass/Less/SugarSS
  2. ​ 可扩展规则 ​: 支持自定义规则和插件
  3. 自动修复能力 ​: 通过 –fix 参数自动修复部分问题
  4. ​ 配置共享 ​: 支持通过 npm 包共享配置
  5. 与构建工具集成 ​: 完美配合 webpack/Vite/Rollup 等工具

3. Prettier

Prettier 是当前前端领域最流行的代码格式化工具,它通过解析代码并重新打印的方式,强制实施一致的代码风格,彻底解决团队中的代码风格争论。

核心设计理念

  1. ​ 固执己见 ​: 提供极少的配置选项,减少风格争论
  2. ​ 多语言支持 ​: 支持 JavaScript/TypeScript/JSX/CSS/SCSS/HTML/Vue 等
  3. ​ 无视原始格式 ​: 完全按照配置重写代码
  4. ​ 集成友好 ​: 与主流编辑器和构建工具无缝集成

4. Commitlint

Commitlint 是一个用于强制执行规范化 Git 提交信息的工具,它通过验证 commit-msg 钩子确保每个提交都符合预定义的格式标准,是构建现代化 Git 工作流的关键组件。

核心价值

  1. ​ 标准化提交 ​: 强制采用约定式提交(Conventional Commits)规范
  2. ​ 自动化生成 ​: 为 CHANGELOG 和版本号提供结构化数据
  3. ​ 团队协作 ​: 统一团队提交信息风格,提升可读性
  4. ​ 流程集成 ​: 与 CI/CD 流程无缝对接,确保合规提交

5. Husky

Husky 是一个 Git 钩子工具,用于在 Git 操作前触发自定义脚本,如 lint、test 等。

核心功能

  1. ​拦截 Git 钩子​: 例如 pre-commit(提交前)、commit-msg(提交消息校验)、pre-push(推送前)。
  2. ​本地强制检查​: 确保代码提交前通过 ESLint、测试等验证,避免将问题代码推送到远程仓库。

6. lint-staged

lint-staged 仅对 Git 暂存区(staged)的文件运行指定的 lint 或格式化工具(如 ESLint、Prettier),避免全量检查整个项目,提升效率。

核心优势​:

  1. ​精准检查​: 只处理本次修改的文件,减少不必要的耗时。
  2. ​配合 Husky 使用​: 通常在 pre-commit 钩子中触发。

PSE 三剑客的分工合作

Prettier、Stylelint、ESLint 这三个工具就像是一个代码质检团队的三个不同岗位,各司其职又互相配合:

三个工具的分工

1. ESLint - 代码"语文老师"

主要工作: 检查 JavaScript/TypeScript/Vue 代码的语法错误和代码风格

关注重点:

特点: 会指出代码中的潜在问题,有些还能自动修复

2. Stylelint - 样式"美术老师"

主要工作: 检查 Css/Scss/Less 等样式代码的语法错误和代码风格

关注重点:

特点: 保证样式代码整洁美观,避免低级错误

3. Prettier - 代码"排版师傅"

主要工作: 不管代码逻辑,只管代码外观排版

关注重点:

特点: 简单粗暴,直接按规则重新排版代码

它们怎么合作

1. 工作顺序

​Prettier​ 先出手:把代码排版整得漂漂亮亮

​ESLint/Stylelint​ 再检查:在漂亮排版的基础上找代码问题

2. 避免打架的秘诀

​ 用 eslint-config-prettier​:告诉 ESLint “排版的事让 Prettier 管,你别插手”

​ 用 stylelint-config-prettier​:同样告诉 Stylelint “样式排版让 Prettier 来”

3. 实际工作场景

当你在编辑器按保存时:

  1. Prettier 先自动格式化代码(改排版)
  2. ESLint 接着检查代码问题(改逻辑)
  3. Stylelint 检查样式问题(改样式)
  4. 最后生成一份又规范又漂亮的代码

举个栗子

假设有一段很丑的代码:

function test() {
const a = 1;console.log("hello");
}

Prettier 处理后 ​:

function test() {
  const a = 1;
  console.log("hello");
}

ESLint 接着检查 ​:

最终结果 ​:

function test() {
  console.log("hello"); // eslint-disable-line no-console
}

工程化配置实战

实战项目代码参考

环境介绍

🍍 版本要求
  • Node.js: v18+ (推荐 v20+)
  • pnpm: v8+

1. 创建 Vue 项目

bash
# 安装 pnpm(如果尚未安装)
npm install -g pnpm

# 创建 Vite + Vue + TypeScript 项目
pnpm create vite my-vue-app --template vue-ts

# 进入项目目录
cd my-vue-app

# 安装依赖
pnpm install

2. 安装 Prettier

1. 安装 Prettier

bash
pnpm add -D prettier

2. 在项目根目录下创建 Prettier 配置文件

.prettierrc.cjs

js
module.exports = {
  // 使用单引号而不是双引号
  singleQuote: true,

  // 不在语句末尾添加分号
  semi: false,

  // 在对象字面量的括号之间添加空格(例如:{ foo: bar })
  bracketSpacing: true,

  // HTML文件的空格处理方式为"ignore",不敏感处理空格
  htmlWhitespaceSensitivity: 'ignore',

  // 自动检测并保持文件原有的换行符风格(LF/CRLF)
  endOfLine: 'auto',

  // 尽可能在所有可能的地方添加尾随逗号(包括函数参数、数组和对象等)
  trailingComma: 'all',

  // 使用4个空格作为缩进
  tabWidth: 4,

  // 使用空格代替制表符
  useTabs: false,

  // 每行代码的最大宽度(超过会自动换行)
  printWidth: 100,

  // JSX中使用单引号而不是双引号
  jsxSingleQuote: true,

  // 在多行JSX元素中,将>放在最后一行的末尾而不是新起一行
  jsxBracketSameLine: false,

  // 在对象字面量中,只有当括号内有换行时才添加括号
  arrowParens: 'avoid',
}

3. 在项目根目录下创建 Prettier 忽略文件

.prettierignore

txt
/dist/
/node_modules/
*.min.js

3. 安装 ESLint

1. 安装 ESLint 及相关插件

bash
pnpm add -D eslint eslint-plugin-vue @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-prettier @eslint/js vue-eslint-parser globals

2. 在项目根目录下创建 ESLint 配置文件

eslint.config.js

js
import js from '@eslint/js'
import vueParser from 'vue-eslint-parser'
import globals from 'globals'
import prettier from 'eslint-config-prettier'
import tsParser from '@typescript-eslint/parser'
import tsPlugin from '@typescript-eslint/eslint-plugin'

export default [
    js.configs.recommended,
    {
        // TypeScript 支持
        files: ['**/*.ts'],
        languageOptions: {
            parser: tsParser,
            parserOptions: {
                ecmaVersion: 'latest',
                sourceType: 'module',
            },
            globals: {
                ...globals.browser,
            },
        },
        plugins: {
            '@typescript-eslint': tsPlugin,
        },
        rules: {
            '@typescript-eslint/no-unused-vars': [
                'warn',
                {
                    argsIgnorePattern: '^_', // 忽略以 _ 开头的参数
                    varsIgnorePattern: '^_', // 可选:忽略以 _ 开头的变量
                },
            ],
            // '@typescript-eslint/no-explicit-any': 'warn',
        },
    },
    {
        // Vue 支持
        files: ['**/*.vue'],
        languageOptions: {
            parser: vueParser,
            parserOptions: {
                ecmaVersion: 'latest',
                sourceType: 'module',
                parser: tsParser, // 添加 TypeScript 解析器
            },
            globals: {
                ...globals.browser,
                ...globals.node,
            },
        },
        rules: {
            'vue/multi-word-component-names': 'off',
            'vue/html-self-closing': [
                'error',
                {
                    html: {
                        void: 'always',
                        normal: 'never',
                        component: 'always',
                    },
                },
            ],
        },
    },
    {
        // 通用规则
        rules: {
            'no-unused-vars': 'off', // 禁用基础规则,使用 @typescript-eslint 版本
            'no-console': 'warn',
            eqeqeq: 'error',
            semi: ['error', 'never'],
        },
    },
    {
        ignores: ['dist/**', 'node_modules/**', '**/*.min.js'],
    },
    prettier,
]

4. 安装 Stylelint

1. 安装 Stylelint 及相关插件

bash
pnpm add -D stylelint stylelint-scss stylelint-config-standard-scss stylelint-config-prettier postcss-html stylelint-config-standard-vue stylelint-config-recess-order

2. 在项目根目录下创建 Stylelint 配置文件

.stylelintrc.cjs

js
module.exports = {
    extends: [
        'stylelint-config-standard-scss',
        'stylelint-config-recommended-vue',
        'stylelint-config-recess-order',
    ],
    plugins: ['stylelint-scss'],
    rules: {
        'value-keyword-case': null,
        'no-descending-specificity': null,
        'function-url-quotes': 'always',
        'no-empty-source': null,
        'selector-class-pattern': null,
        'value-no-vendor-prefix': null,
        'property-no-vendor-prefix': null,
        'selector-pseudo-class-no-unknown': [
            true,
            { ignorePseudoClasses: ['global', 'deep', 'v-deep'] },
        ],
        'selector-pseudo-element-no-unknown': [
            true,
            { ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'] },
        ],
        'scss/at-rule-no-unknown': true,
        'scss/dollar-variable-no-missing-interpolation': true,
        'scss/operator-no-unspaced': true,
        'alpha-value-notation': 'number',
        'color-function-notation': 'modern',
        'hue-degree-notation': 'number',
    },
    ignoreFiles: ['**/node_modules/**', '**/dist/**', '**/*.js', '**/*.ts'],
}

5. 配置 Git Hooks

1. 安装 Husky lint-staged

bash
pnpm add -D husky lint-staged

# 初始化 Git 仓库(如果尚未初始化)
git init

# 初始化 Husky
npx husky-init && pnpm install

2. 修改 pre-commit 钩子

修改 .husky/pre-commit:

bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged

6. VSCode 工作区配置

创建 .vscode/settings.json:

请确保已安装 Prettier、ESLint、Stylelint 插件。

json
{
    // ==================== 编辑器核心配置 ====================
    "editor.tabSize": 2,
    "editor.detectIndentation": false,
    "editor.renderWhitespace": "selection",
    "editor.wordWrap": "on",
    "editor.cursorSmoothCaretAnimation": "on",
    "editor.fontLigatures": true,
    "editor.bracketPairColorization.enabled": true, // 括号配对彩色显示
    "editor.guides.bracketPairs": "active", // 显示活动括号的引导线
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.fixAll": "explicit",
        "source.fixAll.eslint": "explicit",
        "source.fixAll.stylelint": "explicit"
    },
    "[vue]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "eslint.enable": true,
    "stylelint.enable": true,
    "prettier.enable": true,
    "css.validate": false,
    "less.validate": false,
    "scss.validate": false
}

7. 更新项目脚本

修改 package.json 中的 scripts 部分:

json
{
  "scripts": {
        "dev": "vite",
        "build:test": "vue-tsc && vite build --mode test",
        "build:pro": "vue-tsc && vite build --mode production",
        "build": "vue-tsc -b && vite build",
        "preview": "vite preview",
        "lint": "eslint src",
        "fix": "eslint src --fix",
        "format": "prettier --write \"./**/*.{html,vue,ts,js,json,md,scss}\"",
        "lint:eslint": "eslint src/**/*.{ts,vue} --cache --fix",
        "lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix",
        "prepare": "husky install",
        "commitlint": "commitlint --config commitlint.config.cjs -e -V",
        "preinstall": "node ./scripts/preinstall.js"
    },
    "lint-staged": {
        "*.{js,ts,vue}": [
            "eslint --fix",
            "prettier --write"
        ],
        "*.{css,vue}": [
            "stylelint --fix --custom-syntax postcss-html",
            "prettier --write"
        ],
        "*.scss": [
            "stylelint --fix --custom-syntax postcss-scss",
            "prettier --write"
        ],
        "*.{html,json,md}": [
            "prettier --write"
        ]
    }
}

8. 提交规范 (Commitlint)

1. 安装 Commitlint

bash
pnpm add -D @commitlint/config-conventional @commitlint/cli

2. 配置文件

创建 commitlint.config.cjs:

js
module.exports = {
  extends: ["@commitlint/config-conventional"],
  rules: {
    "type-enum": [
      2,
      "always",
      [
        "feat",
        "fix",
        "docs",
        "style",
        "refactor",
        "perf",
        "test",
        "chore",
        "revert",
        "build",
      ],
    ],
    "type-case": [0],
    "type-empty": [0],
    "scope-empty": [0],
    "scope-case": [0],
    "subject-full-stop": [0, "never"],
    "subject-case": [0, "never"],
    "header-max-length": [0, "always", 72],
  },
};

3. 添加 commit-msg 钩子

bash
npx husky add .husky/commit-msg "pnpm commitlint --edit $1"

配置结束,现在当我们填写 commit 信息的时候,前面就需要带着下面的 subject

ℹ️ 信息
  • feat: 新特性、新功能
  • fix: 修改 bug
  • docs: 文档修改
  • style: 代码格式修改, 注意不是 css 修改
  • refactor: 代码重构
  • perf: 优化相关,比如提升性能、体验
  • test: 测试用例修改
  • chore: 其他修改, 比如改变构建流程、或者增加依赖库、工具等
  • revert: 回滚到上一个版本
  • build: 编译相关的修改,例如发布版本、对项目构建或者依赖的改动

9. 强制使用 pnpm

1. 创建 preinstall 脚本

创建 scripts/preinstall.js:

js
if (!/pnpm/.test(process.env.npm_execpath || "")) {
  console.warn(
    `\u001b[33mThis repository requires using pnpm as the package manager ` +
      `for scripts to work properly.\u001b[39m\n`
  );
  process.exit(1);
}

2. 更新 package.json

json
{
  "scripts": {
    "preinstall": "node ./scripts/preinstall.js"
  }
}

10. 测试配置

1. 创建测试组件

创建 src/components/TestComponent.vue:

vue
<template>
  <div class="test-component">
    <h1>Test Component</h1>
  </div>
</template>

<script lang="ts">
export default {
  name: "TestComponent",
};
const a = 1;
const b = "hello world";
</script>

<style scoped>
.test-component {color: red;}
</style>

2. 运行格式化命令

bash
pnpm format
pnpm lint
pnpm stylelint

3. 测试 Git Hooks

bash
echo "console.log('test')" > test.js
git add test.js
git commit -m "test"  # 应该会自动修复代码格式
#Vue3 #Typescript #Vite #工具