4

お時間とご協力いただきありがとうございます。

grunt-contrib-handlebars を使用してハンドルバー (.hbs) テンプレートをプリコンパイルしようとしています

run タスクを実行すると、次のようになります。

this["JST"] = this["JST"] || {};

this["JST"]["app/templates/err.hbs"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
  this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;


  buffer += "<div>Error: ";
  if (stack1 = helpers.error) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
  else { stack1 = depth0.error; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
  buffer += escapeExpression(stack1)
    + "</div>";
  return buffer;
  });

ただし、ターミナルから npm handlebars モジュールを実行すると、次のようになります。

(function() {
  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
templates['err.hbs'] = template(function (Handlebars,depth0,helpers,partials,data) {
  this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;


 buffer += "<div>Error: ";
 if (stack1 = helpers.error) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
 else { stack1 = depth0.error; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
 buffer += escapeExpression(stack1)
   + "</div>";
 return buffer;
 });
})();

2 番目にコンパイルされたテンプレート (端末から実行) はアプリで正しく動作しますが、grunt が作成するテンプレートは動作しません。ここで私が間違っているかもしれないことで、誰かが私を正しい方向に向けることができますか?

私のグラントファイルは次のようになります。

handlebars:
       options:
                wrapped: true
       compile:
                files: 'www/js/templates.js': ['app/templates/*.hbs']

ご協力いただきありがとうございます。

4

2 に答える 2

1

これは、grunt-contrib-handlebars のバージョンがグローバルにインストールされた handlebars npm モジュールとは異なる、異なるバージョンの Handlebars を使用することによって引き起こされた問題であることが判明しました。

于 2015-10-02T14:42:50.697 に答える
0

関数を「processName」として使用し、Gruntfile で「名前空間」を指定することもできarticle_snippet.handlebarsますhandlebars

    handlebars: {
      compile: {
        options: {
          namespace: 'Handlebars.templates',
          processName: function(filename) {
              var name = filenaname.split('/')[1].split('.');
              return name[0];
          },
          wrapped: true,
          commonjs: null
        },
        files: {
          "js/articles/templates.js": "handlebars/article_snippet.handlebars",
        }
      }
    },

grunt-contrib-handlebars docからインスピレーションを得ています

于 2016-01-26T09:38:18.250 に答える