我一直在尝试并尝试为节点开发新的模板引擎。
到目前为止,它仍然可以正常工作,但是我试图解决“ include”功能时碰壁了。
这是到目前为止的工作方式:
@{
var title = "My Title";
}
<title>@title</title>
所有内容都呈现为单个字符串,并立即执行以维护上下文。
创建字符串:
'var title = "My Title";output=\`<title>`+title+`</title>`'
我不喜欢它,但是我无法通过传递每个函数的变量来使eval()
正常工作。
问题: 我有一个include函数:
@include('/filename.html')
如果引擎获取文件名,读取文件名并将其放回输出字符串中,则此方法有效。但是我不能像这样将变量传递给函数:
@include(filename + '.html')
因为我必须执行整个页面才能获取filename
值。
我考虑过将函数暴露给执行的字符串,例如:
'</title>'+render(filename + '.html')+'<h1...'
但是我不想公开渲染引擎的所有代码。
我尝试用eval()
方法控制.call
一次执行一个,但是我无法在不暴露js文件中其他所有内容的情况下将变量传递给eval。
output += eval.call({ title: "My Title" }, html);
这是行不通的。