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

Pre*_*esh 4 vue.js prettier prettier-eslint

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

Prettier 2.1.2 Playground 链接

--parser vue
Run Code Online (Sandbox Code Playgroud)

输入:

<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>
Run Code Online (Sandbox Code Playgroud)

输出:

<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>
Run Code Online (Sandbox Code Playgroud)

预期行为:

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

<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>
Run Code Online (Sandbox Code Playgroud)

或者

<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>
Run Code Online (Sandbox Code Playgroud)

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

Pre*_*esh 6

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

将选项设置--html-whitespace-sensitivityignore,您将得到以下输出:

<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>
Run Code Online (Sandbox Code Playgroud)

尽管不建议这样做,因为空白格式可能会导致文本和内容周围出现额外间距等问题,这可能会影响 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