grunt-contrib-handlebars - 输出与我运行把手 npm 任务时不同

Posted

技术标签:

【中文标题】grunt-contrib-handlebars - 输出与我运行把手 npm 任务时不同【英文标题】:grunt-contrib-handlebars - Output is different than when I run the handlebars npm task 【发布时间】:2013-07-10 12:34:14 【问题描述】:

提前感谢您的时间和帮助。

我正在尝试使用 grunt-contrib-handlebars 预编译把手 (.hbs) 模板

当我运行运行任务时,我最终得到了这个:

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 车把模块,我会得到:

(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;
 );
)();

第二个编译模板(从终端运行)在我的应用程序中正常工作 - 但 grunt 创建的模板不能。有人可能会指出我在这里可能做错的事情的正确方向吗?

我的 gruntfile 看起来像这样:

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

再次感谢您的帮助!

【问题讨论】:

您可以通过将选项 namespace 设置为 false 来避免命名空间,但是我不确定您是否可以获得与过去仅使用 npm 包相同的输出。请注意,版本可能不同! 感谢 Anzeo - namspace 问题很有帮助。我仍然需要弄清楚为什么其余的输出是不同的。还有其他想法吗? pixelworlds,恐怕我还没有找到实现这一目标的解决方案。当我从 npm 变体转移到 grunt 包时,我最终选择更新我的 Handlebars 编译模板在我的项目中的使用方式。 【参考方案1】:

原来这是使用不同版本的 Handlebars 导致的问题,其中 grunt-contrib-handlebars 版本与全局安装的 handlebars npm 模块不同。

【讨论】:

今天有点晚了,但是您如何确定版本?尽管在项目和全球范围内显然安装了相同版本的车把,但我遇到了同样的问题? 信不信由你,我也在 2020 年处理这个问题。你还有机会访问这个项目并可以提供使用的版本吗?【参考方案2】:

您也可以使用函数作为“processName”并在 Gruntfile 中指定一个“命名空间”,例如,如果您在名为 handlebars 的单个文件夹中只有一个文件 article_snippet.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获得灵感

【讨论】:

以上是关于grunt-contrib-handlebars - 输出与我运行把手 npm 任务时不同的主要内容,如果未能解决你的问题,请参考以下文章