当前位置:   article > 正文

最前端|手把手教你打造前端规范工程

最前端|手把手教你打造前端规范工程

前端代码风格因人而异,一个项目参与的人多了,不加强控制可能就是一个大杂烩,对开发人员来讲就是一个噩梦。

如何解决这种困境?

通过使用 ESLint +Prettier+ Husky + Lint-staged+Commitlint + Commitizen 这套方案,它能够在提升代码质量,保障团队协作效率,统一项目代码风格,强化代码审查流程,支持自动化运维 和促进项目管理等方面发挥重要作用,同时为项目的长期稳健发展打下坚实基础。

吴冬林| 前端开发工程师

目录

一、背景

二、代码书写规范

(一)代码检查工具:ESLint

(二)代码格式化工具:prettier

(三)Vscode插件 和设置:

三、代码提交规范

(一)husky

(二)commitlint

四、总结


一、背景

为何要打造这样一套前端现代化规范工程?

1、代码风格一致性:

  • ESLint:作为静态代码检查工具,它定义了一套代码质量规则,用于检测潜在的错误、不符合最佳实践的模式以及不一致的编码风格。通过统一的 ESLint 配置,团队成员能够遵循一致的编程规范,增强代码的可读性和可维护性。
  • Prettier:作为代码格式化工具,Prettier 自动按照预设的样式规则对代码进行格式化,消除了因个人偏好引起的代码风格差异,确保了代码在空格、缩进、行长度、引号使用等方面的一致性。

2、自动化代码质量保障:

  • Husky:通过 Git 钩子机制,在关键的 Git 操作(如提交)前自动触发预定义的任务。在前端规范工程中,Husky 可以确保在代码提交前执行代码检查和格式化,防止不符合规范的代码进入版本库。
  • Lint-staged:配合 Husky 使用,仅针对暂存区中的改动文件运行指定的检查与格式化任务,既节省了资源,又确保只有符合规范的更改才会被提交。

3、规范化提交信息:

  • Commitlint:强制执行提交消息的格式约定(如 Conventional Commits),确保提交信息清晰、一致,便于通过提交历史快速理解代码变更的目的、类型和影响范围。这对于生成 changelog、自动化版本管理、识别影响范围(如构建语义化版本)等 DevOps 流程至关重要。

4、标准化提交流程:

  • commitizen:提供交互式的命令行工具,引导开发者按照预定义的提问模板编写符合 Commitlint 规范的提交消息。它简化了遵循提交规范的过程,尤其对新加入团队的成员或不熟悉特定提交格式的开发者非常友好。

二、代码书写规范

(一)代码检查工具:ESLint

认识:

ESLint 是一个开源的、强大的静态代码分析工具,主要用于检测 JavaScript 和相关编程语言(如 TypeScript、Vue、React、Angular 等)的代码中潜在的错误、不符合最佳实践的模式以及不一致的编码风格。

网址:

·官网地址:https://eslint.org/

·中文网地址:https://eslint.nodejs.cn/

·eslint-vue配置规则:https://eslint.vuejs.org/rules/

使用方法:

1、需要安装相关依赖如下:

  • eslint
  • eslint-plugin-import
  • eslint-plugin-prettier
  • eslint-config-prettier
  • eslint-plugin-vue
  • vue-eslint-parser
  • @typescript-eslint/parser
  • @typescript-eslint/eslint-plugin

2、安装方法:

pnpm i -D eslint eslint-plugin-importeslint-plugin-prettier eslint-config-prettier eslint-plugin-vue vue-eslint-parser @typescript-eslint/parser @typescript-eslint/eslint-plugin

3、配置,eslintrc.js

在根目录下新建 .eslintrc.js 文件, rules 里面的内容根据实际需求自行添加,编辑内容如下:

  1. module.exports = {
  2. root: true,
  3. env: {
  4. browser: true,
  5. node: true,
  6. es6: true
  7. },
  8. parser: 'vue-eslint-parser',
  9. extends: [
  10. 'eslint:recommended', // 推荐使用eslint基础配置规则
  11. 'plugin:vue/vue3-recommended', // 对于Vue3项目,识别vue3语法规则
  12. 'plugin:@typescript-eslint/recommended', // 使用推荐的TypeScript 专用 lint 规则
  13. 'prettier', // 引入eslint-config-prettier,应用 Prettier 的格式化规则,禁用冲突规则
  14. 'plugin:prettier/recommended'// 引入eslint-plugin-prettier,推荐的 prettier 专用 lint 规则
  15. ],
  16. parserOptions: {
  17. parser: '@typescript-eslint/parser',
  18. ecmaVersion: 2020,
  19. sourceType: 'module',
  20. jsxPragma: 'React',
  21. ecmaFeatures: {
  22. jsx: true
  23. }
  24. },
  25. /**
  26. * 自定义或覆盖特定规则 https://www.wenjiangs.com/docs/eslint,vue规则:https://eslint.vuejs.org/rules/
  27. * 主要有如下的设置规则,可以设置字符串也可以设置数字,两者效果一致
  28. * 'off'0 - 关闭规则
  29. * 'warn'1 - 开启警告规则,使用警告级别的错误:warn (不会导致程序退出),
  30. * 'error'2 - 开启错误规则,使用错误级别的错误:error (当被触发的时候,程序会退出)
  31. */
  32. rules: {
  33. 'no-debugger': 'off',
  34. 'no-case-declarations': 'off', // 防止在 switch 语句的 case 子句中声明变量
  35. 'no-console': 'off',
  36. 'no-undef': 'off',
  37. 'no-useless-escape': 'off',
  38. // 'no-unused-vars': 'off', // 防止出现未使用的变量、函数参数或常量
  39. 'no-restricted-imports': 'off',
  40. 'no-use-before-define': 'off',
  41. 'no-sparse-arrays': 'off',
  42. 'compat/compat': 'off',
  43. 'no-constant-condition': 'off',
  44. 'prefer-const': ['warn', { destructuring: 'all', ignoreReadBeforeAssign: true}],
  45. '@typescript-eslint/ban-ts-ignore': 'off',
  46. '@typescript-eslint/explicit-function-return-type': 'off',
  47. '@typescript-eslint/no-explicit-any': 'off',
  48. '@typescript-eslint/no-var-requires': 'off',
  49. '@typescript-eslint/no-empty-function': 'off',
  50. '@typescript-eslint/no-use-before-define': 'off',
  51. '@typescript-eslint/ban-ts-comment': 'off',
  52. '@typescript-eslint/ban-types': 'off',
  53. '@typescript-eslint/no-non-null-assertion': 'off',
  54. '@typescript-eslint/explicit-module-boundary-types': 'off',
  55. // 检查未使用的变量、函数参数、类属性
  56. '@typescript-eslint/no-unused-vars': [
  57. 'error',
  58. {
  59. argsIgnorePattern: '^_',
  60. varsIgnorePattern: '^_',
  61. },
  62. ],
  63. '@typescript-eslint/no-redeclare': 'off',
  64. '@typescript-eslint/no-this-alias': 'off',
  65. 'vue/no-setup-props-destructure': 'off',
  66. 'vue/script-setup-uses-vars': 'error',
  67. 'vue/no-reserved-component-names': 'off',
  68. 'vue/custom-event-name-casing': 'off',
  69. 'vue/attributes-order': 'off',
  70. 'vue/one-component-per-file': 'off',
  71. 'vue/html-closing-bracket-newline': 'off',
  72. 'vue/max-attributes-per-line': 'off',
  73. 'vue/multiline-html-element-content-newline': 'off',
  74. 'vue/singleline-html-element-content-newline': 'off',
  75. 'vue/attribute-hyphenation': 'off',
  76. 'vue/require-default-prop': 'off',
  77. 'vue/require-explicit-emits': 'off',
  78. 'vue/require-toggle-inside-transition': 'off',
  79. 'vue/html-self-closing': 'off',
  80. 'vue/multi-word-component-names': 'off',
  81. 'vue/no-v-html': 'off',
  82. 'vue/no-dupe-keys': 'off',
  83. 'vue/no-deprecated-v-on-native-modifier': 'off',
  84. 'vue/html-indent': 'off',
  85. 'vue/no-template-shadow': 'off',
  86. "prettier/prettier":'off'
  87. }
  88. };

4、配置.eslintignore

在根目录下新建.eslintignore文件, 用来让eslint不用检查这些文件

  1. // .eslintignore
  2. # Logs
  3. logs
  4. *.log
  5. npm-debug.log*
  6. yarn-debug.log*
  7. yarn-error.log*
  8. pnpm-debug.log*
  9. lerna-debug.log*
  10. node_modules
  11. dist
  12. public
  13. # Editor directories andfiles
  14. .vscode/*
  15. !.vscode/extensions.json
  16. .husky
  17. src/assets/
  18. plop-templates/
  19. package.json
  20. README.md

(二)代码格式化工具:prettier

认识:

Prettier 是一个自动化的代码格式化器,支持多种编程语言,包括 JavaScript、TypeScript、HTML、CSS、JSON、Markdown 等。它的目标是提供一种统一、可配置但非协商式的代码风格,旨在消除团队成员之间因代码风格偏好产生的分歧,提高代码可读性和维护性。

网址:

·官方网址:https://prettier.io/

·prettier中文网:https://www.prettier.cn/

使用方法

1、安装:

pnpmi -D prettier

2、配置.prettierrc.js

在根目录下新建 .prettierrc.js 文件,里面的内容根据实际需求自行添加,编辑内容如下:

  1. module.exports= {
  2. // 每行最多字符数量,超出换行(默认80)
  3. printWidth: 80,
  4. // 超出打印宽度 (always | never | preserve )
  5. proseWrap: "preserve",
  6. // (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always)
  7. arrowParens: "always",
  8. // 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false
  9. bracketSameLine: false,
  10. // 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar})
  11. bracketSpacing: true,
  12. // 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto)
  13. embeddedLanguageFormatting: "auto",
  14. // 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css)
  15. htmlWhitespaceSensitivity: "css",
  16. // 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false
  17. insertPragma: false,
  18. // 在 JSX 中使用单引号替代双引号,默认false
  19. jsxSingleQuote: false,
  20. // 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;)
  21. quoteProps: "as-needed",
  22. // 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false
  23. requirePragma: false,
  24. // 结尾添加分号
  25. semi: true,
  26. // 使用单引号 (true:单引号;false:双引号)
  27. singleQuote: true,
  28. // 缩进空格数,默认2个空格
  29. tabWidth: 2,
  30. // 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号
  31. trailingComma: "es5",
  32. // 指定缩进方式,空格或tab,默认false,即使用空格
  33. useTabs: false,
  34. // vue 文件中是否缩进 <style><script> 标签,默认 false
  35. vueIndentScriptAndStyle: false,
  36. // 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
  37. endOfLine: "auto",
  38. };

3、配置.prettierignore

在根目录下新建.prettierignore文件, 用来让prettier不用格式化这些文件

  1. /dist/*
  2. /node_modules/**
  3. /public/*
  4. src/assets/
  5. .prettierrc.js
  6. .eslintrc.js
  7. commitlint.config.js
  8. README.md
  9. package.json
  10. vite.config.ts
  11. # Editor directories andfiles
  12. .vscode/*
  13. !.vscode/extensions.json
  14. .husky/*

(三)Vscode插件 和设置:

Vscode插件:

在vscode插件栏,搜索并安装如下插件;

1、eslint:提供eslint的校验,保存自动修复功能

2、prettier:提供prettier 保存自动格式化的功能

扩展:

项目自身配置eslint、prettier插件与vscode安装插件关系:

相辅相成,共同作用于项目格式化校验和修复;项目自身配置eslint、prettier插件的格式化规范,其优先级要高于vscode安装的eslint、prettier插件;

Vscode设置:

在项目根目录下新建.vscode/setting.json文件,写入以下内容,即可在保存代码的时候自动按照eslint和prettier的规范进行代码格式化

  1. {
  2. // 设置npm包管理器为pnpm
  3. "npm.packageManager": "pnpm",
  4. // 设置编辑器的Tab大小为2个空格
  5. "editor.tabSize": 2,
  6. // 配置编辑器在每次保存时自动格式化代码
  7. "editor.formatOnSave": true,
  8. // 设置默认的代码格式化工具为prettier
  9. "editor.defaultFormatter": "esbenp.prettier-vscode",
  10. // 配置编辑器在保存时执行的代码动作,包括应用所有明确的修复
  11. "editor.codeActionsOnSave": {
  12. "source.fixAll": "explicit",
  13. "source.fixAll.eslint": "explicit",
  14. "source.fixAll.stylelint": "explicit"
  15. },
  16. // 自定义拼写检查词典,包含一些特定的技术词汇
  17. "cSpell.words": [
  18. "lint-staged",
  19. "lintstagedrc",
  20. "persistedstate",
  21. "pinia",
  22. "pnpm",
  23. "stylelint",
  24. ],
  25. }

三、代码提交规范

前提:

需要安装如下依赖:

  • husky
  • lint-staged
  • commitizen
  • cz-git
  • @commitlint/cli
  • @commitlint/config-conventional

(一)husky

认识:

Husky 是一个 Git 钩子管理工具,允许您在 Git 的各个生命周期事件(如 pre-commit、pre-push、post-commit 等)中轻松添加自定义脚本。通过 Husky,您可以确保在提交代码之前执行必要的代码检查(如 ESLint、Prettier、单元测试等),防止不符合规范或存在错误的代码进入版本库。这有助于提高代码质量和维护项目的整洁性。

网址:https://typicode.github.io/husky/

使用方法:

1、配置husky

执行下面两行代码

  1. npm pkg setscripts.prepare="husky install"// 在 package.json 中添加脚本
  2. npm run prepare // 初始化 husky,将 git hooks 钩子交由 husky 执行

执行完这两行代码以后,发生了两件事情:

第一个是package.json中新增了一个脚本

  1. "scripts": {
  2. "prepare": "husky install"
  3. },

第二个是根目下新增了 .husky 文件夹;

2、配置pre-commit

2.1、新建pre-commit文件并添加内容

在.husky文件夹下新建pre-commit 文件,然后添加以下内容:

  1. #!/bin/sh
  2. . "$(dirname "$0")/_/husky.sh"
  3. pnpm execlint-staged

作用:是在执行git commit时,先加载husky的内部脚本,然后使用pnpm执行lint-staged命令,对暂存区中的代码进行代码风格检查和格式化,确保符合项目规范后再提交。

2.2、配置lint-staged

在package.json中,添加如下配置,表示通过eslint来自动修复各类文件格式;

  1. "lint-staged": {
  2. "*.{vue,js,ts,jsx,tsx,md,json}": "eslint --fix"
  3. }

扩展:

Lint-Staged:是一个在 Git暂存区(staging area)中运行 linters 的工具。当您准备提交代码时,Lint-Staged 仅针对已暂存的文件运行指定的 linting 工具(如 ESLint、Prettier、stylelint 等)。这样可以确保只有即将被提交的改动经过了严格的质量检查,避免了对整个项目进行 linting 所带来的性能开销,同时也确保每次提交都是干净且符合规范的。

配置只校验暂存区文件:

在package.json中,添加如下命令,表示只校验暂存区代码格式;

  1. "scripts": {
  2. "lint:lint-staged": "lint-staged"
  3. }

3、效果展示

到这里为止,代码提交时,代码自动检测功能已经实现了,来测试一下效果。

如图:有三处问题:

  1. 12行,错误提示“已声明“name”,但从未读取其值” eslint@typescript-eslint/no-unused-vars
  2. 13行,错误提示:Unexpected constant condition.eslintno-constant-condition
  3. 13~14行"{}",错误提示:Empty block statement.eslint no-empty

提交一下,看一看结果会怎么样?

修改代码后,进行第二次测试;

重新提交,这次提交成功了;结果如下:

结论:通过配置husky和eslint,提交代码的时候会自动进行格式化,如果有格式化解决不了的错误,就会报错。

(二)commitlint

认识:

Commitlint 是一个用于验证 Git 提交消息格式的工具,基于社区广泛接受的 Conventional Commits 规范。它确保提交消息遵循一定的结构和约定,如明确的类型(fix、feat、docs、chore 等)、简洁的描述、可选的正文和 footer 等。通过规范化提交消息,Commitlint 帮助生成清晰、一致的 changelog,便于追踪项目变更历史,辅助自动化版本发布流程(如通过 semantic-release)。

网址:https://commitlint.js.org/

使用方法:

1、配置commit-msg

新建commit-msg文件并添加内容

在.husky文件夹下新建commit-msg 文件,然后添加以下内容:

  1. #!/bin/sh
  2. . "$(dirname "$0")/_/husky.sh"
  3. pnpm execcommitlint --edit "${1}"

作用:使用 pnpm 执行 commitlint 命令,根据 commitlint.config.js 中的配置检查提交消息格式是否符合项目规范。如果提交消息不符合规范,commitlint 尝试自动修正消息内容,以便用户在继续提交时获得符合规范的消息。

2、配置commitlint.config.js

在项目跟目录下新建commitlint.config.js文件,并添加如下配置:

  1. // @see: https://cz-git.qbenben.com/zh/guide
  2. /** @type{import('cz-git').UserConfig} */
  3. module.exports = {
  4. ignores: [commit => commit.includes("init")],
  5. extends: ["@commitlint/config-conventional"],
  6. rules: {
  7. // @see: https://commitlint.js.org/#/reference-rules
  8. "body-leading-blank": [2, "always"],
  9. "footer-leading-blank": [1, "always"],
  10. "header-max-length": [2, "always", 108],
  11. "subject-empty": [2, "never"],
  12. "type-empty": [2, "never"],
  13. "subject-case": [0],
  14. "type-enum": [
  15. 2,
  16. "always",
  17. [
  18. "feat",
  19. "fix",
  20. "docs",
  21. "style",
  22. "refactor",
  23. "perf",
  24. "test",
  25. "build",
  26. "ci",
  27. "chore",
  28. "revert",
  29. "wip",
  30. "workflow",
  31. "types",
  32. "release"
  33. ]
  34. ]
  35. },
  36. prompt: {
  37. messages: {
  38. type: "Select the type of change that you're committing:",
  39. scope: "Denote the SCOPE of this change (optional):",
  40. customScope: "Denote the SCOPE of this change:",
  41. subject: "Write a SHORT, IMPERATIVE tense description of the change:\n",
  42. body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n',
  43. breaking: 'List any BREAKING CHANGES (optional). Use "|" to break new line:\n',
  44. footerPrefixsSelect: "Select the ISSUES type of changeList by this change (optional):",
  45. customFooterPrefixs: "Input ISSUES prefix:",
  46. footer: "List any ISSUES by this change. E.g.: #31, #34:\n",
  47. confirmCommit: "Are you sure you want to proceed with the commit above?"
  48. // 中文版
  49. // type: "选择你要提交的类型 :",
  50. // scope: "选择一个提交范围(可选):",
  51. // customScope: "请输入自定义的提交范围 :",
  52. // subject: "填写简短精炼的变更描述 :\n",
  53. // body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
  54. // breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
  55. // footerPrefixsSelect: "选择关联issue前缀(可选):",
  56. // customFooterPrefixs: "输入自定义issue前缀 :",
  57. // footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",
  58. // confirmCommit: "是否提交或修改commit ?"
  59. },
  60. types: [
  61. {
  62. value: "feat",
  63. name: "feat: A new feature",
  64. emoji: " "
  65. },
  66. {
  67. value: "fix",
  68. name: "fix: A bug fix",
  69. emoji: " "
  70. },
  71. {
  72. value: "docs",
  73. name: "docs: Documentation only changes",
  74. emoji: " "
  75. },
  76. {
  77. value: "style",
  78. name: "style: Changes that do not affect the meaning of the code",
  79. emoji: " "
  80. },
  81. {
  82. value: "refactor",
  83. name: "refactor: ♻️ A code change that neither fixes a bug nor adds a feature",
  84. emoji: "♻️"
  85. },
  86. {
  87. value: "perf",
  88. name: "perf: ⚡️ A code change that improves performance",
  89. emoji: "⚡️"
  90. },
  91. {
  92. value: "test",
  93. name: "test: ✅ Adding missing tests or correcting existing tests",
  94. emoji: "✅"
  95. },
  96. {
  97. value: "build",
  98. name: "build: ️ Changes that affect the build system or external dependencies",
  99. emoji: " ️"
  100. },
  101. {
  102. value: "ci",
  103. name: "ci: Changes to our CI configuration files and scripts",
  104. emoji: " "
  105. },
  106. {
  107. value: "chore",
  108. name: "chore: Other changes that don't modify src or test files",
  109. emoji: " "
  110. },
  111. {
  112. value: "revert",
  113. name: "revert: ⏪️ Reverts a previous commit",
  114. emoji: "⏪️"
  115. }
  116. // 中文版
  117. // { value: "特性", name: "特性: 新增功能", emoji: " "},
  118. // { value: "修复", name: "修复: 修复缺陷", emoji: " "},
  119. // { value: "文档", name: "文档: 文档变更", emoji: " "},
  120. // { value: "格式", name: "格式: 代码格式(不影响功能,例如空格、分号等格式修正)", emoji: " "},
  121. // { value: "重构", name: "重构: ♻️ 代码重构(不包括 bug 修复、功能新增)", emoji: "♻️"},
  122. // { value: "性能", name: "性能: ⚡️ 性能优化", emoji: "⚡️"},
  123. // { value: "测试", name: "测试: ✅ 添加疏漏测试或已有测试改动", emoji: "✅"},
  124. // { value: "构建", name: "构建: ️ 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)", emoji: " ️"},
  125. // { value: "集成", name: "集成: 修改 CI 配置、脚本", emoji: " "},
  126. // { value: "回退", name: "回退: ⏪️ 回滚 commit", emoji: "⏪️"},
  127. // { value: "其他", name: "其他: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: " "}
  128. ],
  129. }
  130. };

作用:commitlint.config.js 是 commitlint 工具的核心配置文件,它用于定义项目中 Git 提交消息(commit messages)应遵循的格式规则和规范。

3、配置commit提交命令

在package.json中,添加如下配置,用于自动提交全部文件并执行 git-cz

  1. // package.json
  2. "scripts": {
  3. "commit": "git pull && git add -A && git-cz && git push",
  4. },
  5. "config": {
  6. "commitizen": {
  7. "path": "node_modules/cz-git"
  8. }
  9. }

扩展:

Commitizen:是一个辅助创建符合 Conventional Commits 规范的 Git 提交消息的命令行工具。它提供了一个交互式的提交流程,引导开发者按照规定的格式输入提交信息,包括类型、scope(可选)、描述、正文(可选)和 footer(可选)。

cz-git:这个包名表明它可能是一个与Git结合使用的Commitizen插件或适配器。一般来说,Commitizen通过cz命令行工具与用户交互,引导他们按照预定义的格式填写提交信息。

4、效果展示:

到这里为止,所有的配置都完成了,来测试一下效果;

使用pnpm run commit来执行代码默认自动提交;

代码提交完成且没有报错提示。

四、总结

1、通过使用 ESLint +Prettier+ Husky + Lint-staged+Commitlint + Commitizen这套方案,它能够在提升代码质量,保障团队协作效率,统一项目代码风格,强化代码审查流程,支持自动化运维 和促进项目管理等方面发挥重要作用,同时为项目的长期稳健发展打下坚实基础。

2、需要安装的依赖包及配置如下:

  1. {
  2. "version": "0.0.0",
  3. "scripts": {
  4. "dev": "vite",
  5. "build:dev": "vite build --mode development",
  6. "build:test": "vite build --mode test",
  7. "build:prod": "vite build --mode production",
  8. "lint:lint-staged": "lint-staged",
  9. "commit": "git pull && git add -A && git-cz && git push",
  10. "prepare": "husky install"
  11. },
  12. "dependencies": {
  13. "vue": "^3.4.23",
  14. },
  15. "devDependencies": {
  16. "@commitlint/cli": "^17.3.0",
  17. "@commitlint/config-conventional": "^17.8.1",
  18. "@typescript-eslint/eslint-plugin": "^5.32.0",
  19. "@typescript-eslint/parser": "^5.32.0",
  20. "commitizen": "^4.3.0",
  21. "cz-git": "^1.3.12",
  22. "eslint": "^8.57.0",
  23. "eslint-config-prettier": "^9.1.0",
  24. "eslint-plugin-import": "^2.29.1",
  25. "eslint-plugin-prettier": "^5.1.3",
  26. "eslint-plugin-vue": "^9.25.0",
  27. "husky": "^9.0.11",
  28. "lint-staged": "^15.2.2",
  29. "prettier": "^3.2.5",
  30. "typescript": "^4.6.4",
  31. "vue-eslint-parser": "^9.4.2",
  32. },
  33. "config": {
  34. "commitizen": {
  35. "path": "node_modules/cz-git"
  36. }
  37. },
  38. "lint-staged": {
  39. "*.{vue,js,ts,jsx,tsx,md,json}": "eslint --fix"
  40. }
  41. }

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号搜索神州数码云基地,了解更多技术干货。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号