es6模板文字上的EJS错误

时间:2016-05-18 20:09:36

标签: yeoman lodash ejs template-literals

我正在创建一个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); 

??谢谢!

1 个答案:

答案 0 :(得分: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);' %>