在 Prettier 中,如何防止 HTML 结束标记的“>”字符被放置在新行上?

Posted

技术标签:

【中文标题】在 Prettier 中,如何防止 HTML 结束标记的“>”字符被放置在新行上?【英文标题】:In Prettier, how do I prevent HTML closing tag's ">" character being placed on a new line? 【发布时间】:2021-01-26 20:29:25 【问题描述】:

很长一段时间以来,我在使用 Prettier 和 Vue.js 时遇到了一个特殊问题。似乎没有解决方案,所以我在这里发布一个问题作为最后的手段。如果您的 html 代码嵌套较深,并且您在 Prettier 中启用了 printWidth 属性(默认情况下已启用),则会出现此问题。

更漂亮的 2.1.2 Playground link

--parser vue

输入:

<template>
  <div>
    <div>
      <div>
        <div>
          <div>
            <ol>
              <li>
                <router-link class="xyz-class abc-class" to="/home">Home</router-link>
              </li>
              <li>
                <router-link class="xyz-class abc-class" to="/posts">Posts</router-link>
              </li>
            </ol>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

输出:

<template>
  <div>
    <div>
      <div>
        <div>
          <div>
            <ol>
              <li>
                <router-link class="xyz-class abc-class" to="/home"
                  >Home</router-link
                >
              </li>
              <li>
                <router-link class="xyz-class abc-class" to="/posts"
                  >Posts</router-link
                >
              </li>
            </ol>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

预期行为:

在我看来,这些中的任何一个都会更好更整洁。

<template>
  <div>
    <div>
      <div>
        <div>
          <div>
            <ol>
              <li>
                <router-link class="xyz-class abc-class" to="/home">
                  Home
                </router-link>
              </li>
              <li>
                <router-link class="xyz-class abc-class" to="/posts">
                  Posts
                </router-link>
              </li>
            </ol>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<template>
  <div>
    <div>
      <div>
        <div>
          <div>
            <ol>
              <li>
                <router-link
                  class="xyz-class abc-class"
                  to="/home"
                >Home</router-link>
              </li>
              <li>
                <router-link
                  class="xyz-class abc-class"
                  to="/posts"
                >Posts</router-link>
              </li>
            </ol>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

我是否在这里遗漏了一些可以禁用/启用以防止这种情况发生的选项?如果有,请指导。

【问题讨论】:

这能回答你的问题吗? Prettier formatting configuration @RobNapier 谢谢,问题大致相同,但解决方案仍然没有关闭。 【参考方案1】:

我找到了解决这个问题的方法。将其留给通过搜索到达这里的人。

将选项--html-whitespace-sensitivity 设置为ignore,您将获得以下输出:

<template>
  <div>
    <div>
      <div>
        <div>
          <div>
            <ol>
              <li>
                <router-link class="xyz-class abc-class" to="/home">
                  Home
                </router-link>
              </li>
              <li>
                <router-link class="xyz-class abc-class" to="/posts">
                  Posts
                </router-link>
              </li>
            </ol>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

虽然不建议这样做,因为空白格式会导致文本和内容周围的额外间距等问题,这可能会影响您的 UI 设计的一致性。

在此处了解更多信息:https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting


感谢 GitHub 上的回复:https://github.com/prettier/prettier/issues/9381#issuecomment-707156908

【讨论】:

以上是关于在 Prettier 中,如何防止 HTML 结束标记的“>”字符被放置在新行上?的主要内容,如果未能解决你的问题,请参考以下文章

如何在浏览器中配置 prettier 以缩进 html

防止 Prettier(代码格式化程序)和 ESLint/TSLint 之间的冲突

如何配置VSCode中的Prettier和ESLint标准

VSCode Prettier 没有格式化 PHP

为 HTML 文件配置 Prettier

eslint/prettier 在 html 标签中添加不需要的空间