1

我正在使用车把模板预编译器进行 express ( 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)

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

同样,此代码在本地运行时运行良好,因此看起来 cloud9 处理的方式有所不同。

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

4

1 回答 1

0

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

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

我仍然无法解释为什么我在本地 nodejs 安装中从来没有遇到同样的错误。

于 2013-04-20T16:27:41.747 回答