要求在胡须模板上的节点和浏览器一样

这个问题使用霍根作为例子,但适用于任何模板。

我试图做一些同构(在客户端和服务器上工作)。 在客户端,如果我需要在胡须文件中:

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

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

我想要完全一样的结果,如果我是用NodeJS运行上述行。

默认情况下,节点只是期望这个文件是一个JavaScript文件,所以结果看起来像这样和错误:

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

我很惊讶,这并不容易find!

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

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

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