我的Node.JS应用程序是否已使用新版本的Handlebars错误对模板进行了预编译?

Rob*_*ler 2 javascript node.js handlebars.js

我正在尝试创建一个使用开源Alpaca Forms包的Node.JS应用程序:

http://www.alpacajs.org/

我正在使用Node版本:v0.10.25

当我从教程中运行测试页时:

http://www.alpacajs.org/tutorial.html

使用该教程中找到的第二个示例页面:

<html>
    <head>
        <link type="text/css" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
        <link type="text/css" href="//code.cloudcms.com/alpaca/1.5.17/bootstrap/alpaca.min.css" rel="stylesheet" />
        <script type="text/javascript" src="//code.jquery.com/jquery-1.11.1.min.js"></script>
        <script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.js"></script>
        <script type="text/javascript" src="//code.cloudcms.com/alpaca/1.5.17/bootstrap/alpaca.min.js"></script>
    </head>
    <body>
        <div id="form"></div>
        <script type="text/javascript">
            $(document).ready(function() {
                $("#form").alpaca({
                    "schema": {
                        "title":"User Feedback",
                        "description":"What do you think about Alpaca?",
                        "type":"object",
                        "properties": {
                            "name": {
                                "type":"string",
                                "title":"Name"
                            },
                            "feedback": {
                                "type":"string",
                                "title":"Feedback"
                            },
                            "ranking": {
                                "type":"string",
                                "title":"Ranking",
                                "enum":['excellent','ok','so so']
                            }
                        }
                    }
                });
            });
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在Chrome调试器控制台中收到以下两个错误,抱怨我使用的模板是使用比当前运行时新的版本的Handlebars 编译的,而不是像SO指定的大多数报告的问题一样旧的版本。这是Chrome调试器控制台中的错误转储:

Uncaught Error: Template was precompiled with a newer version of Handlebars than the current runtime. 
Please update your runtime to a newer version (>= 4.0.0).
    Exception @ handlebars.js:2520
    checkRevision @ handlebars.js:2693
    template @ handlebars.js:2709
    hb.template @ handlebars.js:196
    (anonymous function) @ alpaca.min.js:1
    (anonymous function) @ alpaca.min.js:1
    (anonymous function) @ alpaca.min.js:1

Uncaught TypeError: $(...).alpaca is not a function
    (anonymous function) @ (index):14
    j @ jquery-1.11.1.min.js:2
    k.fireWith @ jquery-1.11.1.min.js:2
    m.extend.ready @ jquery-1.11.1.min.js:2
    J @ jquery-1.11.1.min.js:2
Run Code Online (Sandbox Code Playgroud)

我NPM检查,我正在使用一个版本的车把比4.0.0更新:

$ npm ls | grep handlebars
??? handlebars@4.0.5
Run Code Online (Sandbox Code Playgroud)

这样看来错误消息是错误的吗?

我发现了这两个相关的SO帖子:

模板已使用比当前运行时版本旧的Handlebars预编译

未捕获的错误:模板已与旧版本的Handlebars预编译

但是我没有使用Gulp或Ember.JS,所以我不知道所提供的补救措施是否适用于我的情况。

这是我根据NPM安装的软件包的列表:

npm ls
/home/roschler
??? express@4.13.4
? ??? accepts@1.2.13
? ? ??? mime-types@2.1.10
? ? ? ??? mime-db@1.22.0
? ? ??? negotiator@0.5.3
? ??? array-flatten@1.1.1
? ??? content-disposition@0.5.1
? ??? content-type@1.0.1
? ??? cookie@0.1.5
? ??? cookie-signature@1.0.6
? ??? debug@2.2.0
? ? ??? ms@0.7.1
? ??? depd@1.1.0
? ??? escape-html@1.0.3
? ??? etag@1.7.0
? ??? finalhandler@0.4.1
? ? ??? unpipe@1.0.0
? ??? fresh@0.3.0
? ??? merge-descriptors@1.0.1
? ??? methods@1.1.2
? ??? on-finished@2.3.0
? ? ??? ee-first@1.1.1
? ??? parseurl@1.3.1
? ??? path-to-regexp@0.1.7
? ??? proxy-addr@1.0.10
? ? ??? forwarded@0.1.0
? ? ??? ipaddr.js@1.0.5
? ??? qs@4.0.0
? ??? range-parser@1.0.3
? ??? send@0.13.1
? ? ??? destroy@1.0.4
? ? ??? http-errors@1.3.1
? ? ? ??? inherits@2.0.1
? ? ??? mime@1.3.4
? ? ??? ms@0.7.1
? ? ??? statuses@1.2.1
? ??? serve-static@1.10.2
? ??? type-is@1.6.12
? ? ??? media-typer@0.3.0
? ? ??? mime-types@2.1.10
? ?   ??? mime-db@1.22.0
? ??? utils-merge@1.0.0
? ??? vary@1.0.1
??? handlebars@4.0.5
  ??? async@1.5.2
  ??? optimist@0.6.1
  ? ??? minimist@0.0.10
  ? ??? wordwrap@0.0.3
  ??? source-map@0.4.4
  ? ??? amdefine@1.0.0
  ??? uglify-js@2.6.2
    ??? async@0.2.10
    ??? source-map@0.5.3
    ??? uglify-to-browserify@1.0.2
    ??? yargs@3.10.0
      ??? camelcase@1.2.1
      ??? cliui@2.1.0
      ? ??? center-align@0.1.3
      ? ? ??? align-text@0.1.4
      ? ? ? ??? kind-of@3.0.2
      ? ? ? ? ??? is-buffer@1.1.3
      ? ? ? ??? longest@1.0.1
      ? ? ? ??? repeat-string@1.5.4
      ? ? ??? lazy-cache@1.0.3
      ? ??? right-align@0.1.3
      ? ? ??? align-text@0.1.4
      ? ?   ??? kind-of@3.0.2
      ? ?   ? ??? is-buffer@1.1.3
      ? ?   ??? longest@1.0.1
      ? ?   ??? repeat-string@1.5.4
      ? ??? wordwrap@0.0.2
      ??? decamelize@1.2.0
      ??? window-size@0.1.0
Run Code Online (Sandbox Code Playgroud)

如何解决这些错误?

Sha*_*are 5

在示例HTML中,需要更新通过脚本标签包含的Handlebars库。当它指的是运行时库时,您需要更新您明确包含的JS库,而不是通常的NPM包

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.js"></script>
Run Code Online (Sandbox Code Playgroud)

实际上应该包括4.0.0+版的一个。例如

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.0/handlebars.js"></script>
Run Code Online (Sandbox Code Playgroud)