vue-cli创建的项目使用eslint+prettier格式化的问题

vue-cli创建的项目使用eslint+prettier格式化的问题

背景

项目框架:Vue CLI 4 创建,使用了ESLint。

IDE:Vscode

IDE插件:ESLint 、 Prettier

Prettier 格式化快捷键:Alt + Shift + F

现象

在格式化非 HTML 原生标签时出现换行问题,例如:

<el-button
  size="mini"
  typf="primary"
  @click="
    openRouter({
      name: 'name',
      path: 'pathfF'
    })
  "
  >Element Button</el-button
>

标签的>会跑到下一行。

解决方法1:手动调整

将上面的代码手动调整为:

<!-- 手动将结束标签另起一行 -->
<el-button
  size="mini"
  typf="primary"
  @click="
    openRouter({
      name: 'name',
      path: 'pathfF'
    })
  "
  >Element Button
</el-button>
<!-- 手动将内容另起一行 -->
<el-button
  size="mini"
  typf="primary"
  @click="
    openRouter({
      name: 'name',
      path: 'pathfF'
    })
  "
>
  Element Button
</el-button>

以上情况再格式化时不会出现>另起一行的情况。

解决方法2:配置 prettier

网上找的解决办法是配置 prettier 的 HTML空白灵敏度

{
  // htmlWhitespaceSensitivity:css|strict|ignore
  // ignore 对空白不敏感
  "htmlWhitespaceSensitivity": "ignore"
}

设置的位置众说纷纭:

  1. 在 vscode配置文件中配置 :settings.json
{
  prettier.htmlWhitespaceSensitivity": "ignore"
}

为了确认配置生效,重载IDE。

重新格式化 “丑陋” 的代码,没有变化。

  1. 安装 vetur 并配置它的html格式化工具为 prettier
{
  "vetur.format.defaultFormatter.html": "prettier",
    "vetur.format.defaultFormatterOptions": {
        "prettyhtml": {
            "htmlWhitespaceSensitivity": "ignore"
        }
    },
}

没有变化。

  1. 在prettier配置文件中配置

于是先创建了一个.prettierrc.js并配置

module.export = {
  "htmlWhitespaceSensitivity": "ignore"
}

没有变化,然后将其改为json格式的 .prettierrc

{
  "htmlWhitespaceSensitivity": "ignore"
}

成功格式化。。。(心里一万句。。。)

其他尝试

使用Vue CLI4新建项目,选择 ESLint + Prettier。

eslint配置文件中增加了扩展@vue/prettier

不过它只是用于校验代码风格,智能提示。

并不会影响格式化操作的结果。

总结

项目中使用prettier格式化时,最好新建一个配置文件,并且是.prettierrc,不是.prettierrc.js

当前时间 2020-07-24

“丑陋” 的原因

文本内容单独占行,左右会增加两个空格(换行),渲染到页面就是空格,为避免多余的空格,将标签紧贴文本。

<div class="node1">干净的文本</div>
<div class="node2">
  前后有空白的文本
</div>

<script>
  var node1 = document.querySelector('.node1')
  var node2 = document.querySelector('.node2')

  function getTextProps (node) {
    return {
      textContent: node.textContent,
      innerHTML: node.innerHTML,
      innerText: node.innerText
    }
  }
  console.log(getTextProps(node1))
  console.log(getTextProps(node2))
</script>

textContent 打印结果:

// node1
// "干净的文本"

//node2
// "↵      前后有空白的文本节点↵    "
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值