Javascript 如何将JS字符串解释为文件或在Bundlebars中使用字符串
我正在使用Bundlebars,这是一个优秀的库,用于使用给定数据将把手模板转换为静态html 比如说,Javascript 如何将JS字符串解释为文件或在Bundlebars中使用字符串,javascript,Javascript,我正在使用Bundlebars,这是一个优秀的库,用于使用给定数据将把手模板转换为静态html 比如说, var data = {name: 'foo', location: 'bar'} bb.compile('template.hbs', data) "<h1>Hello {{name}} </h1>" 但是,看起来Bundlebars对html字符串的处理方式不同(例如 var data = {name: 'foo', location: 'bar'} bb.c
var data = {name: 'foo', location: 'bar'}
bb.compile('template.hbs', data)
"<h1>Hello {{name}} </h1>"
但是,看起来Bundlebars对html字符串的处理方式不同(例如
var data = {name: 'foo', location: 'bar'}
bb.compile('template.hbs', data)
"<h1>Hello {{name}} </h1>"
“你好{{name}”
所以我有两个完全不同的问题,任何一个都有帮助:
.compile()
要求第一个参数是文件名,而不是HTML字符串,并且它不显示可能包含HTML字符串的其他API
我不太理解Bundlebars和Handlebars之间的关系(看起来Bundlebars在内部使用Handlebars),但是如果可以使用的话,它需要一个HTML字符串
您应该能够只require('handlebar.js')
并将handlebar本身用于字符串数据。模块本身已经由bundlebar加载,因此它已经可用,并且在模块缓存中
您是否可以在不创建实际文件的情况下,将html文件编码为 变量,使变量本身被解释为文件?[I] 认为Bundlebars尝试使用“打开”函数读取文件] 我不知道Javascript中有任何方法可以创建附加到特定文件名的虚拟文件。如果您使用node.js,您可以创建自定义流,但您需要一个接口,允许您传递一个已经打开的流,而不仅仅是文件名字符串。问题是,当您将文件名字符串传递给Bundlebars时,它是最终将在其上调用
fs.readFile()
,而随后将调用fs.open()
和fs.read()
,并且没有内置的钩子来拦截所有这些系统调用以阻止它们进入文件系统
嗯,这是一个新想法……我想在调用
bb.compile()
之前,您可以使用自己的函数替换fs.readFile()
,该函数将检测特定文件名并替换结果,而无需访问文件系统。这显然是一个巨大的黑客攻击,这取决于您知道Bundlebars调用fs.readFile()
所以您只需要更换这些
警告,这是一个巨大的黑客攻击(我建议找到更好的方法来解决您的问题):
(功能(源代码){
fs.readFile=函数(路径、选项、cb){
//查看路径中是否有HTML
if(path.indexOf(“”!=-1){
//将其视为HTML字符串
setTimeout(函数(){
//调用完成回调,路径为
//文件内容
cb(0,路径);
}, 1);
}否则{
返回原始应用(fs、参数);
}
};
})(fs.readFile);
是的,这就是我好奇的开始,真的。我想知道在JS中是否有一种方法或一个对象可以像对待文件一样对待。@Darshan-在我的回答中添加了更多关于你两个问题的内容。我确实想出了一个“hackish”想法。感谢您的快速回复。我查看了bundlebars的源代码,因为它最终将使用FS,所以我想看看是否可以虚拟创建一个文件。我将在node.js中使用它(这是最终项目)。你介意指导我或告诉我更多关于创建自定义流的想法吗?还看到了giant hack部分-我可能不得不这么做。“lol”。@Darshan-我为giant hack添加了代码。它只是查看路径中是否有HTML,如果是,它只是返回(异步)作为文件内容。