当前位置:   article > 正文

uniapp+vue3+ts(规范化代码配置ESLint+Prettier+Husky)_uni-app eslint prettier 规则设置

uni-app eslint prettier 规则设置

项目规范化配置

编辑器vscode中安装插件:

1.ESLint

2.Prettier

ESLint配置

安装:

pnpm i eslint -D

初始化

npx eslint --init

修改.eslintrc.cjs配置文件

  1. // @see https://eslint.bootcss.com/docs/rules/
  2. module.exports = {
  3. env: {
  4. browser: true,
  5. es2021: true,
  6. node: true,
  7. },
  8. globals: {},
  9. /* 指定如何解析语法 */
  10. parser: 'vue-eslint-parser',
  11. /** 优先级低于 parse 的语法解析配置 */
  12. parserOptions: {
  13. ecmaVersion: 'latest',
  14. sourceType: 'module',
  15. parser: '@typescript-eslint/parser',
  16. jsxPragma: 'React',
  17. ecmaFeatures: {
  18. jsx: true,
  19. },
  20. },
  21. /* 继承已有的规则 */
  22. extends: ['eslint:recommended', 'plugin:vue/vue3-essential', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
  23. plugins: ['vue', '@typescript-eslint'],
  24. overrides: [
  25. {
  26. files: ['*.ts', '*.tsx', '*.vue'],
  27. rules: {
  28. 'no-undef': 0,
  29. },
  30. },
  31. ],
  32. /*
  33. * 'off' 或 0 ==> 关闭规则
  34. * 'warn' 或 1 ==> 打开的规则作为警告(不影响代码执行)
  35. * 'error' 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
  36. */
  37. rules: {
  38. // typeScript (https://typescript-eslint.io/rules)
  39. '@typescript-eslint/no-unused-vars': 2, // 禁止定义未使用的变量
  40. '@typescript-eslint/prefer-ts-expect-error': 2, // 禁止使用 @ts-ignore
  41. '@typescript-eslint/no-explicit-any': 0, // 禁止使用 any 类型
  42. '@typescript-eslint/no-non-null-assertion': 0,
  43. '@typescript-eslint/no-namespace': 0, // 禁止使用自定义 TypeScript 模块和命名空间。
  44. '@typescript-eslint/semi': 0,
  45. 'no-prototype-builtins': 0, // 可以使用obj.hasOwnProperty()
  46. '@typescript-eslint/no-var-requires': 0, // 不允许在import 中使用require
  47. '@typescript-eslint/no-empty-function': 2, // 关闭空方法检查
  48. // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
  49. 'vue/multi-word-component-names': 0, // 要求组件名称始终为 “-” 链接的单词
  50. 'vue/script-setup-uses-vars': 2, // 防止<script setup>使用的变量<template>被标记为未使用
  51. 'vue/no-mutating-props': 0, // 不允许组件 prop的改变
  52. 'vue/no-v-html': 0, // 禁止使用 v-html
  53. 'vue/no-setup-props-destructure': 0, // 禁止 props 解构传递给 setup
  54. 'vue/no-v-model-argument': 0, // 不允许添加要在 v-model 自定义组件中使用的参数
  55. 'vue/component-definition-name-casing': [2, 'PascalCase'], // 强制使用组件定义名称的特定大小写 PascalCase | kebab-case
  56. 'vue/attribute-hyphenation': [2, 'always', { ignore: [] }], // 对模板中的自定义组件强制实施属性命名样式
  57. 'vue/no-dupe-keys': [2, { groups: [] }], // 不允许重复字段名称
  58. 'vue/no-dupe-v-else-if': 2, // 不允许 / v-else-if 链中的 v-if 重复条件
  59. 'vue/no-duplicate-attributes': 2, // 禁止属性重复
  60. 'vue/no-ref-as-operand': 2, // 使用ref对象必须.value
  61. 'vue/first-attribute-linebreak': [
  62. 2,
  63. {
  64. singleline: 'ignore',
  65. multiline: 'below',
  66. },
  67. ], // 强制设置第一个属性的位置
  68. '@typescript-eslint/no-this-alias': [
  69. 'warn',
  70. {
  71. allowDestructuring: false, // Disallow `const { props, state } = this`; true by default
  72. allowedNames: ['_this'], // this的別名可以为_this
  73. },
  74. ],
  75. // eslint(https://eslint.bootcss.com/docs/rules/)
  76. 'no-unexpected-multiline': 2, // 禁止空余的多行
  77. 'no-await-in-loop': 2, // 该规则不允许在循环体中使用 await
  78. 'no-dupe-else-if': 2, // 禁止 if-else-if 链中的重复条件
  79. 'no-const-assign': 2, // 禁止重新分配 const 变量
  80. 'no-dupe-keys': 2, // 禁止对象字面量中的重复键
  81. 'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
  82. 'no-unused-vars': 2, // 禁止未使用的变量
  83. 'use-isnan': 2, // 检查 NaN 时需要调用 isNaN()
  84. 'valid-typeof': 2, // 强制将 typeof 表达式与有效字符串进行比较
  85. 'no-var': 2, // 要求使用 let 或 const 而不是 var
  86. 'no-extra-semi': 2, // 禁止不必要的分号
  87. 'no-multi-str': 2, // 禁止多行字符串
  88. 'no-unused-labels': 2, // 禁止未使用的标签
  89. // 在打开数组括号之后和关闭数组括号之前强制换行
  90. 'array-bracket-newline': [2, 'consistent'],
  91. eqeqeq: [2, 'smart'], // 必须使用全等
  92. 'arrow-spacing': 2, // 在箭头函数中的箭头前后强制执行一致的间距
  93. // 在函数调用的参数之间强制换行
  94. 'function-call-argument-newline': [2, 'consistent'],
  95. 'no-undef': 2, // 禁止使用未声明的变量,除非在 /*global */ 注释中提及
  96. complexity: [2, 15],
  97. indent: [2, 4, { SwitchCase: 1 }],
  98. 'valid-jsdoc': 0, //jsdoc规则
  99. 'no-console': process.env.NODE_ENV === 'production' ? 2 : 0,
  100. 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
  101. 'no-useless-escape': 0, // 禁止不必要的转义字符
  102. '@typescript-eslint/ban-types': 0, // 允许使用function 声明函数
  103. 'prettier/prettier': [
  104. 2,
  105. {
  106. //在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
  107. arrowParens: 'always',
  108. // 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false
  109. bracketSameLine: false,
  110. // 对象字面量的括号之间打印空格
  111. bracketSpacing: true,
  112. // 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto)
  113. embeddedLanguageFormatting: 'auto',
  114. // 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css)
  115. htmlWhitespaceSensitivity: 'ignore',
  116. // 一行最多多少个字符
  117. printWidth: 150,
  118. // 超出打印宽度 (always | never | preserve )
  119. proseWrap: 'preserve',
  120. // 对象属性是否使用引号(as-needed | consistent | preserve;
  121. quoteProps: 'as-needed',
  122. // 指定要使用的解析器,不需要写文件开头的 @prettier
  123. requirePragma: false,
  124. // 不需要自动在文件开头插入 @prettier
  125. insertPragma: false,
  126. // 最后不需要引号
  127. semi: false,
  128. // 使用单引号 (true:单引号;false:双引号)
  129. singleQuote: true,
  130. // 缩进空格数,默认2个空格
  131. tabWidth: 4,
  132. // 多行时尽可能打印尾随逗号。
  133. trailingComma: 'es5',
  134. // 使用制表符而不是空格缩进行
  135. useTabs: false,
  136. // Vue文件脚本和样式标签缩进
  137. vueIndentScriptAndStyle: false,
  138. // 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
  139. endOfLine: 'auto',
  140. },
  141. ],
  142. },
  143. }

.eslintignore忽略文件(沒有此文件自行创建即可)

  1. dist
  2. node_modules

运行脚本添加:

package.json新增两个运行脚本

  1. "scripts": {
  2. "lint": "eslint src",
  3. "fix": "eslint src --fix",
  4. }
Prettier

安装

pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier

prettierrc.json添加规则(沒有此文件自行创建即可)

  1. {
  2. "arrowParens": "always",
  3. "bracketSameLine": false,
  4. "bracketSpacing": true,
  5. "embeddedLanguageFormatting": "auto",
  6. "htmlWhitespaceSensitivity": "ignore",
  7. "insertPragma": false,
  8. "printWidth": 150,
  9. "proseWrap": "preserve",
  10. "quoteProps": "as-needed",
  11. "requirePragma": false,
  12. "semi": false,
  13. "singleQuote": true,
  14. "tabWidth": 4,
  15. "trailingComma": "es5",
  16. "useTabs": false,
  17. "vueIndentScriptAndStyle": false,
  18. "endOfLine": "auto"
  19. }

prettierignore忽略文件

  1. /dist/*
  2. /html/*
  3. .local
  4. /node_modules/**
  5. **/*.svg
  6. **/*.sh
  7. /public/*
Husky

安装

pnpm install -D husky

运行

npx husky-init

会在根目录下生成一个.husky目录,在这个目录下边会有一个pre-commit文件,这个文件里面的命令在我们执行commit 的时候就会执行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/76970
推荐阅读
相关标签
  

闽ICP备14008679号