【问题标题】:EJS error on es6 Template Literalses6 模板文字上的 EJS 错误
【发布时间】:2016-08-01 06:31:13
【问题描述】:

我正在创建一个 Yeoman Express 应用生成器并使用包含模板文字的模板 js 文件。 我希望输出文件包含这一行

app.use(`/api/${apiVersion}`, apiRoutes); 

但我认为 ${apiVersion} 被解释为模板值并给我错误

ReferenceError: apiVersion is not defined
    at eval (lodash.templateSources[2]:9:10)
    at copy.process (/.../node-microservice/node_modules/mem-fs-editor/actions/copy-tpl.js:11:58)

如何在不使用的情况下解决这个问题

app.use('/api/' + apiVersion, apiRoutes); 

??谢谢!

【问题讨论】:

    标签: yeoman lodash ejs template-literals


    【解决方案1】:

    这是由于 Yeoman 支持 lodash 样式模板,这与 ES6 模板字符串冲突。

    解决方法是通过将以下选项对象传递给模板复制例程(作为最后一个参数)来强制 Yeoman 仅使用 EJS 样式模板分隔符:

    this.fs.copyTpl(
      this.templatePath('_foo.js'),
      this.destinationPath(`foo.js`),
      variables,
      { interpolate: /<%=([\s\S]+?)%>/g }
    );
    

    (参考:http://mammal.io/articles/yeoman-generators-es6/)。

    另一种比较麻烦的解决方法是将所需的代码行嵌入到 EJS 模板标签内的字符串中:

    <%= 'app.use(`/api/${apiVersion}`, apiRoutes);' %>
    

    【讨论】:

    • EJS 不依赖于任何包。
    • 你是绝对正确的,我的错。经过进一步研究,事实证明这根本不是一个错误,而是 Yeoman 的一个特性,它允许 lodash 模板和 EJS,并且与 ES6 字符串模板混在一起。
    猜你喜欢
    • 2021-08-06
    • 2013-12-12
    • 1970-01-01
    • 2016-12-02
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多