要求在胡须模板上的节点和浏览器一样
这个问题使用霍根作为例子,但适用于任何模板。
我试图做一些同构(在客户端和服务器上工作)。 在客户端,如果我需要在胡须文件中:
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); }