通过nodejs进行的Handlebars预编译在Cloud9上失败

时间:2013-04-20 09:50:03

标签: javascript node.js handlebars.js cloud9-ide pre-compilation

我正在使用handlebars模板预编译器来表达(https://github.com/diffsky/hbsc)以在nodejs中预编译我的模板。

当我这样做时,它的效果很好但是当我在cloud9 ide(https://c9.io)中尝试它时,它第一次工作,然后我才会得到例外。

这是我在app.js

中的配置
var hbsc = require('hbsc');
    hbsc.compile({
      dir: __dirname + '/views/public',
      outfile: __dirname + '/public/javascripts/compiled-templates.js',
      extensions: ['hbs', 'handlebars']
    });

这是我的简单模板

<b>All users</b>

<div>
    {{#each this}}
    <li>{{email}}</li>
    {{/each}}
</div>

这是我得到的例外

/var/lib/stickshift/5168822b4382ec505c0000ba/app-root/data/471704/views/public/listusers.handlebars:1
(function (exports, require, module, __filename, __dirname) { <b>All users</b>
                                  ^
SyntaxError: Unexpected token <
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

如果我删除已编译的模板文件并在一段时间后再试一次,则会成功(有时)但如果我更改了模板,则会返回错误。

同样,这个代码在运行localy时效果很好,所以看起来cloud9处理的内容不同。

这个错误真让我感到困惑,因为我发现它没有逻辑。任何人都可以帮助我解决从哪里开始寻找解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

服务器的把手模板与客户端的把手模板之间存在冲突。我使用express3-handlebars来编译服务器的模板,错误来自该编译器,而不是基于客户端的错误。

我的解决方案是将客户端模板重命名为.html。这样两个编译器似乎相处得很好。

我仍然无法解释为什么我的本地nodejs安装上没有出现同样的错误。