【问题标题】:Possible to indent lines in template without also indeting the content?可以在模板中缩进行而不用缩进内容吗?
【发布时间】:2021-03-09 13:50:08
【问题描述】:

下面是创建一个带有换行符的字符串,稍后将在电子邮件中结束。

    if (action) {
      description = `
Git pull request action:        ${action}
Git pull request for repo:      ${req.body.repository.full_name}
Git pull request for repo URL:  ${req.body.repository.html_url}

Git pull request title:         ${req.body.pull_request.title}
Git pull request description:   ${req.body.pull_request.body}
Git pull request by user:       ${req.body.pull_request.user.login}
Git pull request URL:           ${req.body.pull_request.html_url}
`
    };

但是,如果我像这样缩进这些行

    if (action) {
      description = `
        Git pull request action:        ${action}
        Git pull request for repo:      ${req.body.repository.full_name}
        Git pull request for repo URL:  ${req.body.repository.html_url}

        Git pull request title:         ${req.body.pull_request.title}
        Git pull request description:   ${req.body.pull_request.body}
        Git pull request by user:       ${req.body.pull_request.user.login}
        Git pull request URL:           ${req.body.pull_request.html_url}
     `
    };

它还缩进输出。

问题 有没有办法在不缩进输出的情况下缩进行?

【问题讨论】:

  • 不要使用模板文字(至少不要使用一个巨大的文字)
  • @Andreas 替代方案是什么?

标签: javascript node.js ecmascript-6


【解决方案1】:

目前无法做到这一点。

但是有一个TC39 proposal to change that(仍处于draft 阶段)。
所以也许将来会有可能。

与此同时,您可以使用零依赖 dedent library,它正是这样做的。

let dedent = require("dedent");

// ...

if (action) {
  description = dedent`
    Git pull request action:        ${action}
    Git pull request for repo:      ${req.body.repository.full_name}
    Git pull request for repo URL:  ${req.body.repository.html_url}

    Git pull request title:         ${req.body.pull_request.title}
    Git pull request description:   ${req.body.pull_request.body}
    Git pull request by user:       ${req.body.pull_request.user.login}
    Git pull request URL:           ${req.body.pull_request.html_url}
  `
};

它处理不同类型的换行符、空行、转义反引号,并保持所有其他缩进一致。

【讨论】:

  • 为什么是图书馆? o.O 使用普通的旧字符串连接,或者将“行”放在一个数组中并调用.join("\n"), ...
  • @Andreas 这是一个零依赖库,它处理其他一些情况,如不同类型的换行符、空行、转义反引号,并保持所有其他缩进一致。我认为使用它没有问题。为什么要重新发明轮子?特别是当没有依赖项时,如果您使用 lib 或只是重新实现它的功能,这并没有太大的区别。正如我所说,它不仅仅是简单的.join()
  • @Andreas 恕我直言,从代码可读性的角度来看,这种方法远比使用串联或使用数组和join()
  • @Andreas OP 没有要求图书馆。恰好有一个可以解决 OP 的问题。因此,这不是题外话。
  • @Andreas OP 没有要求任何库,这个答案不仅回答了问题,还分享了一个解决方案。无论如何,OP的问题已经解决了,这才是最重要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多