Vue代码规范配置实践方案

74 阅读3分钟

代码格式化: prettier(代码结构美化)

使用vue-cli自带prettier配置

语法规范校验: eslint(检测代码语法质量)

使用vue-cli自带eslint配置

样式语法规范校验:stylelint

  1. 安装依赖
npm i 
stylelint-config-standard 
stylelint-config-prettier
postcss-html  针对vue文件
postcss-scss  针对sass文件
--save -D
  1. 样式配置文件
module.exports = {
    extends: [
      'stylelint-config-standard',
      'stylelint-config-prettier',
    ],
    overrides: [
      {
        "files": ["**/*.vue"],
        "customSyntax": "postcss-html"
      }
    ],
    ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts', '**/*.json', ],
  };
  1. 脚本配置
"stylelint": "stylelint **/*.{css,scss,vue} --fix" //全局检查样式错误,可修复
  1. 踩坑:对vue文件的style校验校验问题:

方法一:
针对.vue文件:"stylelint": "stylelint **/*.{vue} --fix --custom-syntax postcss-html"

方法二:
在配置文件里,设置在overrides属性设置专门的解析插件

提交规范校验:husky+lint-staged+commitizen +commitlint

husky

是一个git hook工具,可以帮助我们触发git提交的各个阶段

1.安装依赖

npx husky-init && npm install

它做了3件事情:

a.安装husky相关的依赖

b.在项目目录下自动创建 .husky 文件夹

c.在package.json中添加一个脚本,该脚本会在husky工作的合适时机,在内部被自动调用

lint-staged

在提交代码时,只对git暂存的文件进行代码检查

1.安装依赖

npm i lint-staged -d

2.检查暂存文件的脚本配置

"lint-staged": {
    "**/*.{js,jsx,ts,tsx,vue}": [
      "npm run eslint",
      "git add"
    ],
    "**/*.{css,less,scss,vue}": [
      "npm run stylelint",
      "git add"
    ]
 },

commitizen

是一个帮助我们编写规范 commit message 的工具,会校验git commit -m 'xxxx' 是否符合规范,(如:feat: xxx)

  1. 安装依赖
//安装完毕后会在.bin目录下生成一个工具 --- cz
npm install commitizen -D
npx commitizen init cz-conventional-changelog --save-dev --save-exact

//以上代码,会在package.json里加入一下配置
"config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
}

2.脚本配置

"scripts": {
  "commit": "cz"
}

3.执行代码提交指令,根据提示完成提交步骤,过程中会对代码进行错误审查

git cz

4.提交成功/失败

commitlint

根据代码是否符合各种规范,来限制提交

1.安装依赖

npm i @commitlint/config-conventional @commitlint/cli -D

2.依赖配置

module.exports = {
  extends: ['@commitlint/config-conventional']
}

3.完成以上配置以后,使用husky生成commit-msg文件,验证提交信息

npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"

npm 和npx的区别

a. npx(包执行器)不需要下载包到本地,直接执行

b. npm(包管理器)一般都是通过package.json, 下载在node_modules里面,然后引用本地的文件包

package.json

{
  "name": "project-name",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "prettier": "prettier --write .",//全局修复prettier格式
    "lint": "vue-cli-service lint",//全局检查代码错误
    "prepare": "husky install", //代码提交规范的工具hook
    "commit": "cz",//代码提交规范
    "eslint": "eslint --fix --ext .js,.ts,.vue src",//全局检查eslint错误,可修复
    "stylelint": "stylelint **/*.{css,scss,vue} --fix" //全局检查样式错误,可修复
},
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx,vue}": [
      "npm run eslint",
      "git add"
    ],
    "**/*.{css,less,scss,vue}": [
      "npm run stylelint",
      "git add"
    ]
  },
  "dependencies": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
  "devDependencies": {
    "@commitlint/cli": "^17.4.2",
    "@commitlint/config-conventional": "^17.4.2",
    "@types/jest": "^24.0.19",
    "@typescript-eslint/eslint-plugin": "^4.18.0",
    "@typescript-eslint/parser": "^4.18.0",
    "@vue/cli-plugin-babel": "~4.5.13",
    "@vue/cli-plugin-eslint": "~4.5.13",
    "@vue/cli-plugin-router": "~4.5.13",
    "@vue/cli-plugin-typescript": "~4.5.13",
    "@vue/cli-plugin-unit-jest": "~4.5.13",
    "@vue/cli-plugin-vuex": "~4.5.13",
    "@vue/cli-service": "~4.5.13",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/eslint-config-prettier": "^6.0.0",
    "@vue/eslint-config-typescript": "^7.0.0",
    "@vue/test-utils": "^2.0.0-0",
    "commitizen": "^4.2.6",
    "cz-conventional-changelog": "^3.3.0",
    "eslint": "^6.7.2",
    "eslint-plugin-prettier": "^3.3.1",
    "eslint-plugin-vue": "^7.0.0",
    "husky": "^8.0.0",
    "lint-staged": "^13.1.0",
    "postcss-html": "^1.5.0",
    "postcss-scss": "^4.0.6",
    "prettier": "^2.2.1",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "stylelint": "^14.16.1",
    "stylelint-config-prettier": "^9.0.4",
    "stylelint-config-standard": "^29.0.0",
    "stylelint-scss": "^4.3.0",
    "typescript": "~4.1.5",
    "vue-jest": "^5.0.0-0"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  }
}

参考

vue3实战 --- 实现代码提交规范化

stylelint官网

前端代码风格自动化(3)--Lint-staged

前端工程化:Prettier+ESLint+lint-staged+commitlint+Hooks+CI 自动化配置处理

前端规范之Git工作流规范(Husky + Comminilint + Lint-staged)