Vue3+Ts+eslint+prettier+husky+commitlint

333 阅读2分钟

创建项目安装所需要的插件

npm i @commitlint/cli @commitlint/config-conventional @rushstack/eslint-patch eslint-plugin-prettier husky lint-staged  prettier-D
npm i
npm run dev

更改.eslintrc.cjs为

/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')


module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true
  },
  extends: ['eslint:recommended', 'prettier'],


  parser: 'vue-eslint-parser',
  parserOptions: {
    ecmaVersion: 'latest',
    parser: '@typescript-eslint/parser',
    sourceType: 'module'
  },
  plugins: ['vue', '@typescript-eslint'],
  rules: {}
}

更改.prettierrc.json为

{
  "$schema": "https://json.schemastore.org/prettierrc",
  "semi": false,
  "tabWidth": 2,
  "singleQuote": true,
  "printWidth": 100,
  "trailingComma": "none",
  "useTabs": false,
  "bracketSpacing": true,
  "singleAttributePerLine": true,
  "#singleAttributePerLine": "true为允许template模板标签属性换行"
}

更改.vscode下的extensions.json为

{
  "recommendations": ["esbenp.prettier-vscode"]
}

package.json里scripts添加

"prepare": "husky install"

初始化git仓库

git init

运行

npm run prepare

根目录生成

下载 (1).png

package.json中添加

"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,vue,json}": [
      "npm run lint",
      "npm run format"
    ]
 },

执行生成commit-msg pre-commit文件

npx husky add .husky/commit-msg
npx husky add .husky/pre-commit

下载 (2).png

根目录创建commitlint.config.js

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


  // 以下时我们自定义的规则
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'bug', // 此项特别针对bug号,用于向测试反馈bug列表的bug修改情况
        'feat', // 新功能(feature)
        'fix', // 修补bug
        'docs', // 文档(documentation)
        'style', // 格式(不影响代码运行的变动)
        'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
        'test', // 增加测试
        'chore', // 构建过程或辅助工具的变动
        'revert', // feat(pencil): add ‘graphiteWidth’ option (撤销之前的commit)
        'merge' // 合并分支, 例如: merge(前端页面): feature-xxxx修改线程地址
      ]
    ]
  }
}

修改commit-msg pre-commit文件

下载 (3).png


npx --no -- commitlint --edit

npx lint-staged

安装vscode插件 Prettier - Code formatter ESLint

下载 (4).png

下载 (5).png 设置vscode settings.json

{
  "explorer.confirmDelete": false,
  "security.workspace.trust.untrustedFiles": "open",
  "editor.tabSize": 2,
  "workbench.settings.openDefaultKeybindings": true,
  "[vue]": {
    // "editor.defaultFormatter": "Vue.volar"
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "eslint.enable": true,
  "eslint.run": "onType",
  // 开启自动修复
  "editor.codeActionsOnSave": {
    "source.fixAll": false,
    "source.fixAll.eslint": true
  },
  "editor.minimap.enabled": false,
  "explorer.confirmDragAndDrop": false,
  "files.associations": {
    "*.wxss": "css"
  },
  "prettier.semi": false,
  "emmet.triggerExpansionOnTab": true,
  "emmet.includeLanguages": {
    "vue-html": "html",
    "vue": "html",
    "javascript": "javascriptreact"
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[jsonc]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[json]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  // 保存的时候自动格式化
  "editor.formatOnSave": true,
  // 默认格式化工具选择prettier
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnType": true,
  "[dart]": {
    "editor.formatOnSave": true,
    "editor.formatOnType": true,
    "editor.rulers": [80],
    "editor.selectionHighlight": false,
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    "editor.suggestSelection": "first",
    "editor.tabCompletion": "onlySnippets",
    "editor.wordBasedSuggestions": false
  },
  "explorer.compactFolders": false,
  "window.zoomLevel": 1,
  "workbench.colorTheme": "Default Dark+"
}

重启vscode测试发现没有通过校验不能提交代码

下载 (6).png

没有添加主题照样不能提交

下载 (7).png

然后添加主题引用变量a可以通过校验提交代码

下载 (8).png

下载 (9).png

还可以使用stylelint增加css校验

npm install --save-dev postcss-scss postcss-html stylelint-config-recommended-vue stylelint-config-standard-scss stylelint stylelint-config-recess-order

创建.stylelintrc.cjs添加配置


module.exports = {
  extends: [
    'stylelint-config-standard',
    // scss 支持
    'stylelint-config-standard-scss',
    'stylelint-config-recommended-vue/scss',
    'stylelint-config-recess-order'
  ]
}

修改package.json

"scripts": {
    "dev": "vite",
    "build": "run-p type-check build-only",
    "preview": "vite preview",
    "build-only": "vite build",
    "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
    "format": "prettier --write "./**/*.{html,vue,ts,js,json,md}"",
    "prepare": "husky install",
    "lint:css": "stylelint **/*.{vue,css,sass,less} --fix"
  },
  "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,vue,json}": [
      "npm run lint",
      "npm run format"
    ],
    "*.{vue,less,css,scss}": [
      "npm run lint:css"
    ]
  },

安装vscode插件Stylelint

下载.png vscode settings.json添加配置,然后重启vscode

// 开启自动修复
"editor.codeActionsOnSave": {
"source.fixAll": false,
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true
},
"stylelint.validate": ["css", "postcss", "scss", "less", "vue"],

测试

下载 (1).png

修改正确可以提交代码

下载 (2).png

还可以增加一些忽略校验的文件缩小校验范围,可以提高效率