【问题标题】:Disable Prettier from formatting inline JS in HTML files in VS Code禁止 Prettier 在 VS Code 中格式化 HTML 文件中的内联 JS
【发布时间】:2021-04-29 20:42:49
【问题描述】:

我正在使用 eslint-config-prettiereslint-plugin-prettier 包通过 ESLint 运行 Prettier。我也将 Prettier 作为开发依赖项用于非 JS 文件。我将这两个扩展与 VS Code 一起使用,在保存时自动验证和格式化我的代码:Prettier - Code formatterESLint

我在 HTML 文件中遇到内联 JS 的问题。似乎通过 ESLint 运行的 Prettier 要么没有运行,要么被常规的 Prettier 扩展所推翻,即使在我的配置文件中我已明确将选项 html.format.contentUnformatted 设置为 "pre,code,textarea,script" 以防止格式化该内容使用默认格式化程序。我希望它忽略 script 标签中的内容,因为 ESLint 应该在那里处理格式。

相关设置在我的settings.json:

{
  "javascript.validate.enable": false,  // turns off default VS Code validation, I'm using ESLint's
  "javascript.format.enable": false,    // ^ see above
  "editor.formatOnSave": true,          // Turn on formatting for all files except JS/JSX
  "[javascript]": {
    "editor.formatOnSave": false
  },
  "[javascriptreact]": {
    "editor.formatOnSave": false
  },
  "eslint.alwaysShowStatus": true,
  "editor.codeActionsOnSave": {
    "source.fixAll": true // Let ESLint fix all fixable errors on save
  },
  "eslint.run": "onSave", // Run ESLint on save
  // Turn off Prettier for JS since we are doing it through Eslint already
  "prettier.disableLanguages": ["javascript", "javascriptreact"],
  "html.validate.scripts": false, // turn off default VSCode JS validation in HTML files
  "editor.defaultFormatter": "esbenp.prettier-vscode", // Use Prettier formatter
  "html.format.contentUnformatted": "pre,code,textarea,script" // Don't format content within these tags
}

知道有什么问题吗?我也愿意接受其他方式来构建事物的建议。感谢您的帮助!

【问题讨论】:

    标签: visual-studio-code vscode-settings prettier prettier-eslint


    【解决方案1】:

    您可以使用 Prettier 的 embeddedLanguageFormatting 选项来实现您想要的。见https://prettier.io/docs/en/options.html#embedded-language-formatting

    html.format.*VS Code 设置,是 VS Code 内置格式化程序的设置,与 Prettier 无关。

    【讨论】:

    • 啊,html.format.* 仅适用于内置格式化程序是有道理的。我试过"prettier.embeddedLanguageFormatting": "off",不幸的是它没有用。处理这个问题的更好方法是在所有 JS 上同时运行 ESLint 和 Prettier 的格式化程序并禁用 ESLint 中的冲突规则?
    • 也许你只需要重启 VS Code?​​span>
    • “只需在所有 JS 上同时运行 ESLint 和 Prettier 的格式化程序,并在 ESLint 中禁用冲突规则” - 这是 Prettier 网站上推荐的方法:prettier.io/docs/en/integrating-with-linters.html
    • embeddedLanguageFormatting 似乎没有解决此问题。它似乎是用于字符串中的代码。
    • 该选项绝对控制 HTML-in-JS。在Prettier's playground 上自己尝试(点击左下角的“显示选项”按钮,然后选择html 解析器,然后切换embeddedLanguageFormatting 以比较结果)。
    猜你喜欢
    • 2020-01-14
    • 2021-04-24
    • 2018-10-20
    • 2020-03-28
    • 2019-03-06
    • 2020-06-25
    • 2021-07-10
    • 2020-10-03
    • 2018-06-19
    相关资源
    最近更新 更多