gpt4 book ai didi

javascript - 如何将预编译的 hogan.js 模板包装到 AMD 模块中?

转载 作者:行者123 更新时间:2023-11-30 06:27:08 25 4
gpt4 key购买 nike

我正在尝试将预编译我的 Mustache 模板并入我的构建过程。我正在使用 AMD 进行代码组织,因此我想将编译后的函数包装到模块中。

我正在尝试执行以下操作:

var fs = require('fs');

fs.readFile('template.html', 'utf-8', function(err, data){

function wrap(fnString){
var pre = 'define(function(){return ';
var post = '});';
return pre + fnString + post;
}

var hogan = require('hogan.js');
var compiledFn = hogan.compile(data, {asString: true});
fs.writeFile('template.js', wrap(compiledFn), function(){console.log('written template module')});

});

当我尝试在我的应用程序中使用导出的函数时,我得到了一个错误:

Uncaught TypeError: Object [object global] has no method 'b' 

我是不是在编译模板的时候做错了什么?包装函数时我做错了什么吗?该函数是否需要存在于全局范围内?

最佳答案

所以这个问题是我误解了模板预编译与 hogan 一起工作的方式:它输出模板的普通 JS“函数版本”,但是您仍然需要传递给 Hogan.template(str) 的预渲染字符串。

由于 hogan 的精简版仅模板版本只有 2.5kb,我只是将其包含到我的 AMD 模块中,一切正常,如下所示:

var fs = require('fs');
var Hogan = require('hogan.js');

var output = 'define(function(){\n';
output += 'var Templates = {};\n';
output += fs.readFileSync('template.min.js', 'utf-8') + '\n';

fs.readdir(process.cwd(), function(err, data){
if (err) console.log(err);
data.forEach(function(el){
var s = el.split('.');
if (s[s.length - 1] === 'html'){
var precompiled = Hogan.compile(fs.readFileSync(process.cwd() + + el, 'utf-8'), {asString: true});
output += 'Templates[\'' + el.split('.')[0] + '\'] = new Hogan.Template(' + precompiled + ');\n';
console.log('Compiled template:', el);
}
});

output += 'return Templates;});';

fs.writeFile(process.cwd() + '/templates.js', output, function(){
console.log('Template build succeeded!');
});

});

关于javascript - 如何将预编译的 hogan.js 模板包装到 AMD 模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com