You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Prettier使HTML属性始终换行(含单个属性)

关于Prettier强制单个属性换行的配置方案

Prettier原生的singleAttributePerLine选项确实只对多属性的HTML元素生效,没有直接配置项支持单属性也强制换行。不过可以通过以下两种方式实现需求:

  • 自定义Prettier插件:
    你可以编写一个简单的Prettier插件,遍历HTML AST节点,当检测到元素只有单个属性时,手动将属性拆分为单独一行并调整缩进。核心思路是修改元素节点的格式输出逻辑,强制属性换行,不管属性数量多少。

  • 结合ESLint规则(若项目使用ESLint):
    如果项目中搭配了ESLint,可以结合eslint-plugin-prettier,或是借助html-eslint-parser编写自定义规则,检测单属性元素的格式并自动修复为属性换行的形式。不过这种方式需要额外配置ESLint,复杂度稍高。

以下是自定义插件的简化逻辑示例(伪代码):

// 自定义插件核心逻辑
module.exports = {
  parsers: {
    html: require('prettier/parser-html'),
  },
  printers: {
    html: {
      print(path, options, print) {
        const node = path.getValue();
        if (node.type === 'Element' && node.attributes.length === 1) {
          // 强制拆分属性到新行并添加缩进
          const openingTag = [
            '<', node.name, '\n',
            options.indent, ' ', node.attributes[0].name, '=', '"', node.attributes[0].value, '"',
            '>\n', options.indent, ' ',
            print(path.get('children')),
            '\n', '</', node.name, '>'
          ].join('');
          return openingTag;
        }
        // 其他情况沿用原生Prettier逻辑
        return require('prettier/parser-html').printers.html.print(path, options, print);
      },
    },
  },
};

需要注意的是,自定义插件可能会和Prettier版本存在兼容性问题,需要随Prettier版本更新调整插件逻辑。

内容的提问来源于stack exchange,提问作者Mr.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:12:21