vue3+vite+ts配置eslint+husky

vue3+vite+ts配置eslint+husky

创建项目命令

yarn create vite vue3-vite-ts --template vue-ts

eslint代码风格检查,prettier进行格式化代码

  1. 安装相关依赖
yarn add eslint eslint-plugin-vue eslint-define-config --dev # eslink
yarn add prettier eslint-plugin-prettier @vue/eslint-config-prettier --dev # prettire
yarn add @vue/eslint-config-typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser --dev # 对ts的支持
  1. 编写对应的配置文件 .eslintrc.js
const { defineConfig } = require('eslint-define-config')
module.exports = defineConfig({
  root: true,
  /* 指定如何解析语法。*/
  parser: 'vue-eslint-parser',
  /* 优先级低于parse的语法解析配置 */
  parserOptions: {
    parser: '@typescript-eslint/parser',
    //模块化方案
    sourceType: 'module',
  },
  env: {
    browser: true,
    es2021: true,
    node: true,
    // 解决 defineProps and defineEmits generate no-undef warnings
    'vue/setup-compiler-macros': true,
  },
  extends: [
    // https://github.com/vuejs/eslint-plugin-vue
    // 'plugin:vue/vue3-essential',
    // https://github.com/vuejs/eslint-config-standard
    // 'standard'
    'plugin:vue/vue3-recommended',
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended', // typescript-eslint推荐规则,
    'prettier',
    'plugin:prettier/recommended',
    './.eslintrc-auto-import.json', // 这是unplugin-auto-import/vite相关配置,自动引入vue相关api
  ],
  // 解决 error  Component name "index" should always be multi-word  vue/multi-word-component-names
  overrides: [
    {
      files: ['src/views/**/*.vue'],
      rules: {
        'vue/multi-word-component-names': 0,
      },
    },
  ],
  rules: {
    // 禁止使用 var
    'no-var': 'error',
    semi: 'off',
    // 优先使用 interface 而不是 type
    '@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
    '@typescript-eslint/no-explicit-any': 'off', // 可以使用 any 类型
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    // 解决使用 require() Require statement not part of import statement. 的问题
    '@typescript-eslint/no-var-requires': 0,
    // https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/ban-types.md
    '@typescript-eslint/ban-types': [
      'error',
      {
        types: {
          // add a custom message to help explain why not to use it
          Foo: "Don't use Foo because it is unsafe",

          // add a custom message, AND tell the plugin how to fix it
          String: {
            message: 'Use string instead',
            fixWith: 'string',
          },

          '{}': {
            message: 'Use object instead',
            fixWith: 'object',
          },
        },
      },
    ],
    // 禁止出现未使用的变量
    '@typescript-eslint/no-unused-vars': [
      'error',
      { vars: 'all', args: 'after-used', ignoreRestSiblings: false },
    ],
    'vue/html-indent': 'off',
    // 关闭此规则 使用 prettier 的格式化规则,
    'vue/max-attributes-per-line': ['off'],
    // 优先使用驼峰,element 组件除外
    // 'vue/component-name-in-template-casing': [
    //   'error',
    //   'PascalCase',
    //   {
    //     ignores: ['/^el-/', '/^router-/'],
    //     registeredComponentsOnly: false,
    //   },
    // ],
    // 强制使用驼峰
    // camelcase: ["error", { properties: "always" }],
    // 优先使用 const
    'prefer-const': [
      'error',
      {
        destructuring: 'any',
        ignoreReadBeforeAssign: false,
      },
    ],
  },
})

.eslintignore不会对以下文件进行代码风格检查

build/*.js
src/assets
node_modules
public
dist
auto-import.d.ts
components.d.ts

.prettierrc具体规则官网自行查找,prettier主要是格式化代码

{
    "semi": false,
    "singleQuote": true,
    "printWidth": 80,
    "trailingComma": "all",
    "arrowParens": "avoid",
    "endOfLine": "auto"
  }

.prettierignore对以下文件不会格式化

build/*.js
src/assets
node_modules
public
dist
auto-import.d.ts
components.d.ts

husky

husky是一个Git Hook,可以帮助我们对commit前,push前以及commit提交的信息进行验证,现在我们就来安装并配置一下这个工具,首先通过自动配置命令安装,命令如下:

npx husky-init && npm install  # npm
npx husky-init && yarn         # Yarn 1
npx husky-init --yarn2 && yarn # Yarn 2+

执行完毕之后会在项目的根目录出现一个.husky的目录,目录下有一个pre-commit文件,我们将npm test修改为我们需要执行的命令,示例代码如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint

最后我们配置一下package.json,示例代码如下:

"scripts": {
  "lint": "eslint src --fix --ext .js,.ts,.jsx,.tsx,.vue && prettier --write --ignore-unknown""
},
  • src:要验证的目标文件夹;
  • –fix:自动修复命令;
  • –ext:指定检测文件的后缀
    现在我们进行commit之前会对代码进行检测并进行格式化

lint-staged

我们配置好了husky后,会出现一个问题,就是我们不管是改动一行还是两行都会对整个项目进行代码检查和格式化,我们可以通过lint-staged这个工具来实现只对git暂存区中的内容进行检查和格式化,配置步骤如下:
1.安装lint-staged

yarn add lint-staged --dev

2.配置package.json

{
  "scripts": {},
  // 新增
  "lint-staged": {
    "*.{vue,js,ts,tsx,jsx}": [
      "eslint --fix",
      "prettier --write --ignore-unknown"
    ]
  },
}

3.修改.husky/pre-commit,修改内容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

这里就配置完成了,但是你修改文件后,commit时遇到error会出现这个问题,你所修改的文件都给你返回为原来的样子,并且报错如下:

Reverting to original state because of errors...

4.解决如下
修改.husky/pre-commit,修改内容如下:

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

npx lint-staged --no-stash

end!!!
你所修改的文件全部消失lint-staged

从0开始搭建一个Vue3.x项目骨架

### 1. 配置 Husky 的背景 Husky 是一种用于 Git Hooks 的工具,它可以帮助开发者在执行某些 Git 命令之前运行脚本。通过 Husky,可以在提交代码前自动触发 ESLint 或 Prettier 等工具来校验代码质量[^1]。 --- ### 2. 安装依赖 为了实现基于 ViteVue3TypeScript 的项目中的 Husky 配置,首先需要安装必要的依赖包: #### 安装 Husky ```bash npm install husky --save-dev ``` #### 初始化 Husky 初始化 Husky 并启用 Git Hooks 功能: ```bash npx husky-init && npm install ``` 这一步会在 `.husky` 文件夹下创建默认的 `pre-commit` Hook 脚本文件,并将其添加到项目的根目录中[^3]。 #### 可选:安装 Lint-Staged 如果希望仅针对即将被提交的文件运行校验,则可以安装 `lint-staged` 工具: ```bash npm install lint-staged --save-dev ``` --- ### 3. 配置 Husky Hooks 编辑 `.husky/pre-commit` 文件以指定钩子的行为。例如,在提交前运行 ESLint 校验命令: ```bash #!/bin/sh . "$(dirname "$0")/_/husky.sh" # 运行 eslint 对暂存区文件进行校验 npx lint-staged ``` 上述脚本将在每次执行 `git commit` 命令时调用 `lint-staged` 来处理暂存区域内的文件。 --- ### 4. 配置 Lint-Staged 在 `package.json` 中新增或修改 `lint-staged` 配置项,以便定义具体的校验逻辑。以下是常见的配置示例: ```json { "lint-staged": { "*.{ts,tsx,vue}": [ "eslint --fix", "prettier --write" ], "*.css": ["stylelint --fix"], "*.{png,jpg,gif,svg}": ["imagemin"] } } ``` 此配置表示对于扩展名为 `.ts`, `.tsx`, `.vue` 的文件将依次运行 ESLint 自动修复和 Prettier 格式化;而对于 CSS 文件则应用 Stylelint。 --- ### 5. 添加 Commit Message 规范支持 (可选) 可以通过集成 **CommitLint** 和 **CZ CLI** 实现更严格的提交消息管理。 #### 安装 CommitLint ```bash npm install @commitlint/{cli,config-conventional} --save-dev ``` #### 创建 CommitLint 配置文件 新建 `.commitlintrc.js` 文件并写入如下内容: ```javascript module.exports = { extends: [&#39;@commitlint/config-conventional&#39;] }; ``` #### 安装 CZ CLI ```bash npm install cz-customizable --save-dev ``` 更新 `package.json` 的 scripts 字段,增加交互式提交功能: ```json "scripts": { "prepare-commit-msg": "exec < /dev/tty && node_modules/.bin/cz --hook || true" }, "config": { "commitizen": { "path": "./node_modules/cz-customizable" } } ``` 最后设置 `husky` 使用该脚本来拦截标准输入框模式下的提交操作: ```bash npx husky add .husky/commit-msg &#39;npx --no-install commitlint --edit $1&#39; ``` --- ### 总结 完成以上步骤后,您的 Vite + Vue3 + TypeScript 项目即可具备强大的代码质量和版本控制能力。每一次提交都会经过严格检验,从而减少潜在错误的发生概率[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值