要求小胡子模板在节点上与浏览器相同

时间:2014-09-16 22:55:57

标签: javascript node.js mustache hogan.js isomorphism

此问题以Hogan为例,但适用于任何模板。

我正在尝试制作同构的东西(在客户端和服务器上都有效)。如果我需要胡子文件,请在客户端上:

var tpl = require('./something.ms');

然后浏览器+转换检测到这是一个扩展的胡须文件,tpl是一个对象,其中一个函数是.render

如果我要使用NodeJS运行上述行,我想要完全相同的结果。

默认情况下,Node只是希望这个文件是一个javascript文件,所以结果看起来像这样和错误:

(function (exports, require, module, __filename, __dirname) { <h1>some html</h1> ...

1 个答案:

答案 0 :(得分:2)

我很惊讶这不容易找到!

http://nodejs.org/api/globals.html#globals_require_extensions

不幸的是,虽然“不太可能离开”但它已被弃用。我实际上认为它解决了我在这种情况下没有看到解决方案的问题。

var Hogan = require('hogan.js');
require.extensions['.ms'] = function(mod, file){
    var tpl = fs.readFileSync(file, {encoding:'UTF-8'});
    mod.exports = Hogan.compile(tpl);
}