指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

基于eslint和prettier的代码格式化:

  • 在线文档以及在线平台
    • https://prettier.io/docs/en/
    • https://prettier.io/playground/

下面是一个.eslintrc.json文件:

{
  "env": {
    "browser": true,
    "node": true
  },
  "root": true,
  "parser": "vue-eslint-parser",
  "extends": [
    "@nuxtjs/eslint-config-typescript",
    "plugin:prettier/recommended"
  ],
  "plugins": ["prettier"],
  "rules": {
    // ignore for page names
    "vue/multi-word-component-names": [
      "error",
      {
        "ignores": [
          "index",
          "[slug]",
          "[...slug]",
          "[id]",
          "default",
          "boilerplate",
          "custom",
          "error"
        ]
      }
    ],
    "vue/block-lang": [
      "error",
      {
        "script": {
          "lang": "ts"
        }
      }
    ],
    "vue/block-order": [
      "error", {
      "order": ["template", "script", "style"]
    }]
  }
}

但是实际可以简化一点,删除这个 "plugins": ["prettier"]:

{
  "env": {
    "browser": true,
    "node": true
  },
  "root": true,
  "parser": "vue-eslint-parser", //这个地方用了  vue-eslint-parser 解析器,该解析器允许我们对 .vue 文件的 <template> 进行检查。如果我们在模板中使用复杂的指令和表达式,就很容易在 <template> 上犯错。这个解析器和 eslint-plugin-vue 的规则可以发现其中的一些错误。
  "extends": [
    "@nuxt/eslint-config", //这个才是NUXT3的版本
    "plugin:prettier/recommended"
  ],
  "rules": {
    // ignore for page names,下面这些,都是 eslint-plugin-vue 的规则的使用,具体可以参考:https://eslint.vuejs.org/rules/block-order.html,这里面定义了很多规则,本来要使用下面的 eslint-plugin-vue,需要先在plugins下引入vue的,即 plugins: ["vue"], 但是由于在配置中使用了 parser: "vue-eslint-parser",ESLint 会自动查找并使用与所选 parser 相关的插件规则,包括 eslint-plugin-vue。因此,虽然你没有在 plugins 中引入 eslint-plugin-vue,但由于使用了 parser: "vue-eslint-parser",相关的 Vue.js 规则仍然会生效。这是一种在 Vue.js 项目中使用 ESLint 的常见方式。
    "vue/multi-word-component-names": [
      "error",
      {
        "ignores": [
          "index",
          "[slug]",
          "[...slug]",
          "[id]",
          "default",
          "boilerplate",
          "custom",
          "error"
        ]
      }
    ],
    "vue/block-lang": [//限制vue页面使用的script,必须定义lang="ts"
      "error",
      {
        "script": {
          "lang": "ts"
        }
      }
    ],
    "vue/block-order": [//限制vue页面 ["template", "script", "style"] 三者的顺序
      "error", {
      "order": ["template", "script", "style"]
    }]
  }
}

参考:

https://juejin.cn/post/6924568874700505102
https://zhuanlan.zhihu.com/p/68026905
https://github.com/prettier/eslint-plugin-prettier // 这个markdown文档里面有介绍  plugin:prettier/recommended 可以同时设置 eslint-plugin-prettier 和 eslint-config-prettier
https://github.com/nuxt/eslint-config // 在nuxt下使用的话,需要看这个,不同版本的nuxt,安装的不一样,之前的模板项目里面的配置,就有问题,我修改了
https://typescript-eslint.io/getting-started // 这个链接下,是关于 @typescript-eslint/parser 和 @typescript-eslint/eslint-plugin 这两个包的使用,之前模板项目里面配置了,但是我发现没有用到,我就去掉了
https://github.com/nuxt/eslint-plugin-nuxt //这个目前也没用,我也去掉了,但是markdown下有一个配置的两种用法间接的解释了extends和plugins写关系

总结:

①其实大部分最后都会将 prettier 作为主要的格式化样式,但是 prettier 和 其它eslint插件不同的是,它必须包括 eslint-plugin-prettier 和 eslint-config-prettier 两个文件,而 其它的只需要一个就可以了
②extends 、plugins 和 rules 三者之间的关系
在我实际使用看来, 
extends = plugins + rules

plugins:
eslint本身有些规则,但肯定无法包含所有语法,因此eslint支持自定义规则,而针对特殊语法自定义的那些规则我们称之为eslint插件,常见的有: eslint-plugin-import、eslint-plugin-promise、eslint-plugin-react。这些插件都是
单独的package,安装这些插件后,若要是项目支持这些规则,必须将其配置在eslint字段中,比如针对如上三个示例插件的配置:plugins: ["import", 'promise', 'react']。

extends:
plugins的配置仅仅代表在项目中引入了哪些规则,并没有指明该规则是警告、报错、忽略,extends要做的就是引入eslint推荐的规则设置。按照eslint插件的开发规范,每个插件的入口文件都会导出一个对象,其中就有一个configs字段,该字段
是个对象,他可以把该插件已有的规则分成不同的风格,比如:x eslint插件共定义了a、b、c三个规则,这三个规则我可以配置多种风格,比如:
module.exports = {
    configs: {
        recommended: {
            plugins: ["x"],
            env: ["browser"],
            rules: {
                a: 1,
                b: 0,
                a: 2,
            }
        },
        node: {
            plugins: ["x"],
            env: ["node"],
            rules: {
                a: 0,
                b: 2,
                a: 1,
            }
        }
    }
};

假设我们要选择recommended风格,在extends字段中填写 ["plugin:x/recommended"]。至此,项目便可以基于X语法的recommended风格做代码检测.

rules:
当eslint插件没有指定风格时,我们可以基于rules完全自定义一套风格,当某个风格的单个规则不满足需求,在rules中重新设置便可覆盖.