前端项目工程化(vite)

381 阅读5分钟

配置 eslint - ESLint 9.0 + vue3.0 + js(语法校验)

如果是ESLint 9.0 + vue3.0 + TS,参考文章最新ESLint 9.0 + vue3.0 + TS配置

ESLint最初是由Nicholas C. Zakas 于 2013 年 6 月创建的开源项目。它的目标是提供一个插件化的javascript代码检测工具

首先安装eslint(^9.3.0)

pnpm i eslint -D

初始化配置

npx eslint --init

选择如下配置项

自动生成的配置文件eslint.config.js

import globals from 'globals'
import pluginJs from '@eslint/js'
import pluginVue from 'eslint-plugin-vue'

export default [
  { languageOptions: { globals: { ...globals.browser, ...globals.node } } },
  pluginJs.configs.recommended,
  ...pluginVue.configs['flat/essential'],
]

配置运行脚本

"scripts": {
    "lint": "eslint src --fix",
}

可配合eslintvscode插件,实现代码校验提示

如果遇到 vscode 没有校验提示的问题,检查插件设置是否开启以下配置

配置 prettier(代码格式化)

prettier(^3.2.5) 用于统一代码风格,支持包含js在内的多种语言。

安装指令

pnpm install -D prettier

.prettierrc.js添加规则

// Prettier配置文件
export default {
  // 使用单引号而非双引号
  singleQuote: true,
  // 不使用分号结尾
  semi: false,
  // 在对象的大括号与属性之间添加空格
  bracketSpacing: true,
  // 在HTML中忽略空白敏感性
  htmlWhitespaceSensitivity: 'ignore',
  // 自动检测并使用项目中已有的换行符风格
  endOfLine: 'auto',
  // 在数组和对象字面量的尾部添加逗号
  trailingComma: 'all',
  // 缩进宽度为2个空格
  tabWidth: 2,
  //单行长度
  printWidth: 80,
}

.prettierignore忽略文件

/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*

运行脚本

  "scripts": {
    "format": "prettier --write \"./**/*.{html,vue,js,json,md}\"",
  }

安装 prettier 的 vscode 插件

在 .vscode 文件夹下的 settings.json 文件中配置 vscode 自动保存并格式化代码

如果自动保存并格式化失败,可以先卸载 prettier 插件再重新安装

{
  "editor.formatOnSave": true, // 开启自动保存
  "editor.defaultFormatter": "esbenp.prettier-vscode" // 默认格式化工具选择 prettier
}

配置 husky + lint-staged

在上面我们已经集成好了我们代码校验工具,但是需要每次手动的去执行命令才会格式化我们的代码。如果有人没有格式化就提交了远程仓库中,那这个规范就没什么用。所以我们需要强制让开发人员按照代码规范来提交。

要做到这件事情,就需要利用husky在代码提交之前触发git hook(git在客户端的钩子)

安装husky(^9.0.11)lint-staged(^15.2.4)

pnpm install -D husky lint-staged

执行

npx husky-init

会在根目录下生成个一个.husky目录,在这个目录下面会有一个pre-commit文件,这个文件里面的命令在我们执行commit的时候就会执行,同时会在 package.json 中自动新增如下脚本

{
    "script":{
        "prepare": "husky install"
    }
}

.husky/pre-commit文件添加如下命令:

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

npx --no-install lint-staged

接下来我们配置 lint-staged,在 package.json 中添加下面的配置信息

"lint-staged": {
  "*.{js,vue,ts,jsx,tsx}": [
    "prettier --write",
    "eslint --fix"
  ],
  "*.{html,css,less,scss,md}": [
    "prettier --write"
  ]
}

这样之后,我们后续提交到暂存区的代码也就会被 eslint+prettier 格式化和检查,进一步保证我们的代码规范

配置 commitlint(规范提交信息)

对于我们的commit信息,也是有统一规范的,不能随便写,要让每个人都按照统一的标准来执行,我们可以利用**commitlint**来实现。

安装

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

添加配置文件,新建commitlint.config.js,然后添加下面的代码:

export default {
  extends: ['@commitlint/config-conventional'],
  // 校验规则
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat', //新特性、新功能
        'fix', //修改bug
        'docs', //文档修改
        'style', //代码格式修改, 注意不是 css 修改
        '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],
  },
}

package.json中配置scripts命令

{
  "scripts": {
    "commitlint": "commitlint --config commitlint.config.js -e -V"
  },
}

现在当我们填写commit信息的时候,前面就需要带着下面的前缀

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

配置 husky

npx husky add .husky/commit-msg

在生成的 commit-msg 文件中添加下面的命令

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

pnpm commitlint

当我们 commit提交信息时,就不能再随意写了,必须是 git commit -m 'fix: xxx' 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的

统一包管理器工具

团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样, 导致项目出现bug问题,因此包管理器工具需要统一管理 安装

pnpm install -D only-allow

添加指令

"scripts": {
  "preinstall": "npx only-allow pnpm"
}

当我们使用npm或者yarn来安装包的时候,就会报错了。原理就是在install的时候会触发preinstallnpm提供的生命周期钩子)这个文件里面的代码