【问题标题】:Loading ES6 template string from file从文件中加载 ES6 模板字符串
【发布时间】:2017-01-15 03:03:44
【问题描述】:

让我解释一下我的实际问题。 我有一个看起来像这样的模板字符串:

/${name}
  get
  post
  /{id}
    get
    /file-content
      get
      post

缩进必须保持不变。

现在,如果我要使用这样的模板字符串,它可能看起来像这样:

function test(arr) {
    let ret = []
    arr.forEach(
        function(name) {
            return `/${name}
  get
  post
  /{id}
    get
    /file-content
      get
      post`
            return ret
        }
    )
}

看起来很可笑,对吧?我当然可以在我的模板中添加额外的空格以匹配我的代码缩进,但是之后我必须对字符串执行不必要的操作以再次对其进行规范化。

所以我的想法是将模板字符串移动到外部文件,并在我需要模板字符串时require 该文件。
但是 require 不能用于该问题,因为它只不过是一个文本文件,我当然不想每次需要它时都从磁盘读取该文件并对其执行eval

我可以想出几个解决这个问题的方法,但我似乎找不到令人满意的解决方案。

【问题讨论】:

  • 只是出于好奇:为什么首先需要它采用这种格式?
  • 你的意思是${id}
  • 您可以使用标记模板来规范缩进中的额外空格。
  • @nils 和 Bergi 的 fromat 被称为 YAML。我需要它用于 RAML。 raml.org/developers/raml-200-tutorial#base-raml-file

标签: javascript node.js ecmascript-6 require template-strings


【解决方案1】:

这个怎么样:

// template.js
module.exports = name => `
/${name}
  get
  post
  /{id}
    get
    /file-content
      get
      post
`.trim()

// app.js
const template = require('./template')('name');

【讨论】:

  • 这只是解决方法之一。我只是不想在我的模板上调用 trim 或任何东西。我觉得应该有办法解决这个问题。在向模板字符串添加更多变量时也会增加大量维护工作。
  • 如果你在开头和结尾添加换行符,你应该更好地屏蔽它们,而不是修剪。在第一行的末尾和 post 之后添加一个反斜杠
  • @Thomas 是的,这也是我最初的解决方案,但我拒绝了它,因为它很难看
  • 那么我宁愿使用/编写一些后处理步骤将纯模板转换为脚本;甚至可能将所有模板文件连接到一个模板模块中
  • @Thomas me too,但有点不清楚在 OP 眼中它或不是一个好的解决方案。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 2011-01-11
  • 2016-09-19
  • 2015-02-18
  • 2013-01-29
  • 2018-01-23
相关资源
最近更新 更多