当前位置:   article > 正文

vue项目通过eslint格式校验,通过prettier格式化,eslint+prettier前端项目统一格式规范_vue prettier

vue prettier

Eslint和Prettier的区别:

     Eslint:

                        1. Eslint可以对js语法检测、限制和修复

                        2. Eslint可以对代码风格进行格式化,但是不能对css、less等格式化

     Prettier:

                        1. Prettier不可以对任何语法检测、限制和修复

                        2. Prettier可以对多种代码风格,包括js、jsx、ts、json、css、less、scss、html、vue等等进行格式化

从上面两点比较可以看出,Eslint对代码语法检测限制和修复更专业,而Prettier对代码风格更专业,所以项目中Eslint可以检测语法中潜在的问题,比如定义某个变量却没有使用,这时候Eslin会发出警告,Prettier专门做格式化,统一团队中所有人的代码风格。

所以项目中,Eslint做语法检测,Prettier做格式化,但是Eslint中也有对代码的格式化功能,会不会和Prettier的格式化冲突?会,但是可以解决,很简单,用eslint-plugin-prettier关掉所有和prettier冲突的eslint配置,也就是以prettier为主,相当于prettier接管了eslint中代码格式的问题,而语法校验依然用的是eslint,这样两者就完美结合了

下面是针对vue2(vue3不同,但是大同小异)的Eslint和Prettier需要的插件:

 插件装完以后就需要配置Eslint和Prettier规则了,在项目根目录下新建.eslintrc.js文件  和.prettierrc.js文件,如下图:

.eslintrc.js文件 内容如下:

  1. module.exports = {
  2. root: true,
  3. parserOptions: {
  4. parser: 'babel-eslint'
  5. },
  6. env: {
  7. browser: true,
  8. node: true,
  9. es6: true
  10. },
  11. extends: [
  12. 'eslint:recommended',
  13. 'plugin:vue/strongly-recommended',
  14. '@vue/standard'
  15. ],
  16. // 添加规则
  17. /**
  18. * eslint https://eslint.bootcss.com/docs/rules/
  19. * vue扩展 https://github.com/vuejs/eslint-plugin-vue/tree/v6.2.2/docs/rules
  20. * https://eslint.vuejs.org/rules/
  21. * 0 or 'off'
  22. * 1 or 'warn'
  23. * 2 or 'error'
  24. */
  25. rules: {
  26. semi: 0,
  27. 'space-before-function-paren': 0,
  28. // 最大属性每行
  29. 'vue/max-attributes-per-line': [
  30. 2,
  31. {
  32. singleline: 5, // 一行是最大属性数
  33. multiline: {
  34. max: 1, // 多行是最大属性数
  35. allowFirstLine: false // 是否允许属性和标签在同一行
  36. }
  37. }
  38. ],
  39. // 自定义属性断字 my-prop (always,never,ignore)
  40. 'vue/attribute-hyphenation': [0, 'always'],
  41. // html标签自关闭
  42. 'vue/html-self-closing': [
  43. 1,
  44. {
  45. html: {
  46. void: 'always',
  47. normal: 'always',
  48. component: 'always'
  49. },
  50. svg: 'always',
  51. math: 'always'
  52. }
  53. ],
  54. // 组件名称模板 PascalCase,kebab-case,registeredComponentsOnly,ignores
  55. // 'vue/component-name-in-template-casing': [1, 'kebab-case'],
  56. 'vue/component-name-in-template-casing': 0,
  57. // 结束括号间距 关闭>标签括号之前强制执行一致的间距样式
  58. 'vue/html-closing-bracket-spacing': 0,
  59. // 单行元素的内容前后换行
  60. 'vue/singleline-html-element-content-newline': 0,
  61. // 禁止注册模板中未使用的组件
  62. 'vue/no-unused-components': 1,
  63. // 多行元素的内容前后换行
  64. 'vue/multiline-html-element-content-newline': 0,
  65. // 禁止在与 v-for 相同的元素上使用 v-if
  66. 'vue/no-use-v-if-with-v-for': 1,
  67. // 要求或禁止在标签的右括号前换行
  68. 'vue/html-closing-bracket-newline': 0,
  69. // template模板js解析错误
  70. 'vue/no-parsing-error': 1,
  71. // vue组件的name必须使用大驼峰式命名
  72. 'vue/name-property-casing': [1, 'PascalCase'],
  73. // 强制组建中方法顺序
  74. 'vue/order-in-components': 2,
  75. // 强制执行有效的 `v-show` 指令
  76. 'vue/valid-v-show': 1,
  77. // 要求使用 `===` 和 `!==`
  78. 'vue/eqeqeq': 2,
  79. // 禁用 console
  80. 'no-console': 0,
  81. // 禁用 tab
  82. 'no-tabs': 0,
  83. // 禁用 var
  84. 'no-var': 1,
  85. // 强制使用一致的反勾号、双引号或单引号
  86. quotes: [
  87. 2,
  88. 'single', // 要求尽可能地使用单引号
  89. {
  90. avoidEscape: true, // 允许字符串使用单引号或双引号
  91. allowTemplateLiterals: true // 允许字符串使用反勾号
  92. }
  93. ],
  94. // 禁止删除变量
  95. 'no-delete-var': 2,
  96. // 要求使用 const 声明那些声明后不再被修改的变量
  97. 'prefer-const': [
  98. 2,
  99. {
  100. ignoreReadBeforeAssign: false
  101. }
  102. ],
  103. // 强制 generator 函数中 * 号周围有空格 es6 Generators函数
  104. 'generator-star-spacing': 'off',
  105. // 禁止混合使用不同的操作符 运算符
  106. 'no-mixed-operators': 0,
  107. // 强制箭头函数的箭头前后使用一致的空格(--fix)
  108. 'arrow-spacing': 1,
  109. // 禁止或强制在代码块中开括号前和闭括号后有空格(--fix)
  110. 'block-spacing': 1,
  111. // 不允许在 case 子句中使用词法声明
  112. 'no-case-declarations': 1,
  113. // 要求使用骆驼拼写法
  114. camelcase: 0,
  115. indent: 'off',
  116. 'vue/html-indent': 'off',
  117. 'standard/computed-property-even-spacing': 0,
  118. 'no-mixed-spaces-and-tabs': 0,
  119. 'no-useless-escape': 0,
  120. 'vue/no-multi-spaces': 0,
  121. 'no-unexpected-multiline': 0
  122. }
  123. };

 .prettierrc.js文件内容如下:

  1. module.exports = {
  2. endOfLine: 'auto',
  3. // 书写宽度
  4. printWidth: 80,
  5. // 语句末尾打印分号
  6. semi: true,
  7. // 使用单引号
  8. singleQuote: true,
  9. // 尾随逗号
  10. trailingComma: 'none',
  11. // 在方法的花括号前面加空格
  12. spaceBeforeFunctionParen: true,
  13. // 用键位tab缩进
  14. useTabs: true,
  15. // 标签换行不完整问题
  16. htmlWhitespaceSensitivity: 'ignore',
  17. // 在唯一的箭头函数参数周围包含括号
  18. arrowParens: 'always'
  19. };

到这里关于Eslint和Prettier的配置就结束了,但是还有一些需要注意的点,比如代码编辑器需要安装Eslint插件和Prettier插件,如下图:

 

 到这里就结束了?没有,还需要配置编辑器的默认格式化插件,这个在vscode的settings.json文件中配置即可,比如html、css、less、JavaScript、vue、json、typescript等等语言的默认格式化插件,这里都配置为Prettier,(settings.json)如下所示:

  1. {
  2. "[html]": {
  3. "editor.defaultFormatter": "esbenp.prettier-vscode"
  4. },
  5. "[css]": {
  6. "editor.defaultFormatter": "esbenp.prettier-vscode"
  7. },
  8. "[less]": {
  9. "editor.defaultFormatter": "esbenp.prettier-vscode"
  10. },
  11. "[javascript]": {
  12. "editor.formatOnSave": true,
  13. "editor.defaultFormatter": "esbenp.prettier-vscode"
  14. },
  15. "[vue]": {
  16. "editor.formatOnSave": true,
  17. "editor.defaultFormatter": "esbenp.prettier-vscode"
  18. },
  19. "[json]": {
  20. "editor.formatOnSave": true,
  21. "editor.defaultFormatter": "esbenp.prettier-vscode"
  22. },
  23. "[typescript]": {
  24. "editor.defaultFormatter": "esbenp.prettier-vscode"
  25. },
  26. "[typescriptreact]": {
  27. "editor.defaultFormatter": "esbenp.prettier-vscode"
  28. },
  29. "[markdown]": {
  30. "editor.defaultFormatter": "esbenp.prettier-vscode"
  31. },
  32. // vscode默认启用了根据文件类型自动设置tabsize的选项
  33. "editor.detectIndentation": false,
  34. // 重新设定tabsize
  35. "editor.tabSize": 2,
  36. // #每次保存的时候自动格式化
  37. "editor.formatOnSave": true,
  38. // 当编辑器失去焦点时,自动保存更改了的编辑器
  39. "files.autoSave": "onFocusChange",
  40. // 配置文件关联 :任何 vue 后缀的文件会被认为是vue文件
  41. "files.associations": {
  42. "*.vue": "vue"
  43. },
  44. // 编辑器字体大小
  45. "editor.fontSize": 18,
  46. // 若设置为 true,则自动从当前 Git 仓库的默认远程仓库提取提交
  47. "git.autofetch": true,
  48. // 在没有暂存的更改时提交所有更改
  49. "git.enableSmartCommit": true,
  50. // 每次保存的时候将代码按eslint格式进行修复
  51. "editor.codeActionsOnSave": {
  52. "source.fixAll.eslint": true
  53. },
  54. // 启用在vscode中重命名或者移动文件夹时自动更新导入路径的功能--js
  55. "javascript.updateImportsOnFileMove.enabled": "always",
  56. // 启用在vscode中重命名或者移动文件夹时自动更新导入路径的功能--ts
  57. "typescript.updateImportsOnFileMove.enabled": "always",
  58. // 每次保存的时候以下文件类型将代码按eslint格式进行修复
  59. "eslint.validate": [
  60. "javascript",
  61. "javascriptreact",
  62. "html",
  63. "vue"
  64. ],
  65. // 路径映射
  66. "alias-skip.mappings": {
  67. "@": "/src",
  68. "~@/": "/src",
  69. "views": "/src/views"
  70. },
  71. // 在文件路径中指定要替换的前缀
  72. "vue-helper.componentPrefix": {
  73. "alias": "@",
  74. "path": "src"
  75. },
  76. }

到这里就真的结束了。

彩蛋:如果上面关于vscode的settings.json配置需要团队中所有人都统一,这样带来的好处是,比如团队中有四五个人甚至更多人,你就不需要挨个挨个教他们配置,甚至还要看他们配置的对不对,而且你还可以告诉团队中的人Eslint+Prettier需要安装的vscode插件,做法非常简单,可以看下面的文章:

项目中多人协作开发,统一编辑器vscode的配置_liqifengmu的博客-CSDN博客

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

闽ICP备14008679号