为啥看起来 eslint 和 prettier 好像在打架?

Posted

技术标签:

【中文标题】为啥看起来 eslint 和 prettier 好像在打架?【英文标题】:Why does it seem like eslint and prettier are fighting one another?为什么看起来 eslint 和 prettier 好像在打架? 【发布时间】:2021-10-03 13:51:42 【问题描述】:

我在 VSCode 上安装了 eslint 和更漂亮的扩展。我通常使用 prettier 来修复和格式化我的 html。我搭建了一个 vue-cli 项目,它为 eslint 和 prettier 安装了几个开发依赖项:

"devDependencies": ,
    "@vue/cli-plugin-eslint": "~4.5.13",
    "@vue/eslint-config-prettier": "^6.0.0",
    "eslint": "^7.31.0",
    "eslint-plugin-prettier": "^3.4.0",
    "eslint-plugin-vue": "^7.14.0",
    "prettier": "^2.3.2",
  

当我从事这个项目时,我想关闭一些规则;主要是 eslint no-unexpected-multiline、prettier printWidth 和其他一些我在工作时注意到的。但是每当我尝试将这些添加到.prettierrc.js.eslintrc.js(我必须手动创建的更漂亮的配置文件)时,它似乎大部分都忽略了它们。我不知道为什么。它还会忽略我为忽略下一行和整个文件(我不经常使用但相关)而制作的任何 cmets,例如 // eslint-disable-next-line prettier/prettier

这是我的 .eslintrc.js 的样子:

module.exports = 
  root: true,
  env: 
    node: true,
  ,
  extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"],
  parserOptions: 
    parser: "babel-eslint",
  ,
  rules: 
    "prettier/prettier": "warn",
    "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
    "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
    "no-unexpected-multiline": "error",
  ,
;

在规则下它似乎唯一听的是prettier/prettier,因为如果关闭我可以关闭。我不得不将其关闭以消除整个项目中的行,因为它想在新行上添加每个元素属性。

这是prettierrc.js

module.exports = 
  tabWidth: 2,
  semi: true,
  singleQuote: false,
  printWidth: 200,
;

我还不得不关闭formatOnSave。我很确定问题出在extends: 数组中,但我不知道为什么。我读过的所有 eslint 文档都只显示了一个插件,而不是像这样的多个插件。

如何让规则发挥作用?

【问题讨论】:

是的,他们在一起玩得不太好。我记得花了很多时间来匹配规则。为什么不让 eslint 进行格式化? 好主意。我可以从extends 数组中删除plugin:vue/essential@vue/prettier 吗? 是的,并且来自您的包 json。您还想在您的 vs 代码中禁用更漂亮的插件并安装 eslint 并将其设置为默认格式化程序。 好的,我会试试的。我发誓我花在与 linters 战斗上的时间比实际编码上的时间还多 【参考方案1】:

我在下面很幸运 -

.eslintrc.js

  extends: ["plugin:vue/essential", "eslint:recommended", "prettier"],
  plugins: ["prettier"],

在另一个项目中我正在使用这个 -

.eslintrc.js

  extends: [
    "plugin:vue/essential",
    "eslint:recommended",
    "prettier",
    "plugin:prettier/recommended",
  ],
  plugins: ["prettier"],

prettierrc.js

// prettier.config.js or .prettierrc.js
module.exports = 
  endOfLine: "auto",
;

【讨论】:

这就是进步。它似乎只在终端中显示我保存的最后一个文件以及运行npm run serve 时的错误。我希望它会显示在 vscode 的问题选项卡中。但它尊重我在 prettierc.js 中创建的规则。 好吧,我说得太早了……我不知道发生了什么以及在哪里设置规则。一分钟它抱怨更改为单引号,然后它没有。我在 prettierrc.js 中添加了一条规则 singleQuote: true, 并且它没有抱怨,我尝试向 eslintrc 添加规则,如下所示:"prettier": error: semi: "true", singleQuote: "true" ,。一开始它在抱怨,现在它没有,我没有改变任何东西。 首先,从 prettierrc 中删除所有规则,并从 eslintrc 中删除更漂亮的规则。在你的 .code-workspace 添加这个:“settings”:“editor.formatOnSave”:true 另外,确保插件已经添加到 eslintrc plugins: ["prettier"], 我感觉到你的痛苦,很沮丧。习惯需要一段时间,但过一段时间就会变得容易。我会看看这个文档-npmjs.com/package/eslint-plugin-prettier

以上是关于为啥看起来 eslint 和 prettier 好像在打架?的主要内容,如果未能解决你的问题,请参考以下文章

Eslint 和 Prettier 冲突(eslint-config-prettier 不工作)

ESLint 和 Prettier 冲突,无法为代码块禁用 Prettier

VSCode + ESLint + Prettier 代码语法检查和格式化

prettier插件配置符合eslint规范

Linter:“在 React + TS + 样式化组件上插入 `··` eslint(prettier/prettier)”

VsCode eslint与prettier配置冲突