Javascript 一个文件中包含RequireJS和多个编译的Handlebar.js模板

Javascript 一个文件中包含RequireJS和多个编译的Handlebar.js模板,javascript,maven,requirejs,handlebars.js,Javascript,Maven,Requirejs,Handlebars.js,我是新来的。我正在Java/Maven应用程序中同时使用RequireJS和handlebar.js 我还使用来编译我的把手模板。需要编译这些模板,以便它们作为跨域解决方案的一部分工作 插件正在编译我的模板并将它们合并到一个文件中。生成的文件(我们称之为template.js)包含如下内容: define('a.template', ['handlebars'], function(Handlebars) { ... var templates = Handlebars.template

我是新来的。我正在Java/Maven应用程序中同时使用RequireJShandlebar.js

我还使用来编译我的把手模板。需要编译这些模板,以便它们作为跨域解决方案的一部分工作

插件正在编译我的模板并将它们合并到一个文件中。生成的文件(我们称之为template.js)包含如下内容:

define('a.template', ['handlebars'], function(Handlebars) {
  ...
  var templates = Handlebars.templates = Handlebars.templates || {};
  templates['a.template'] = template;
  var partials = Handlebars.partials = Handlebars.partials || {};
  partials['a.template'] = template;
  return template;
}
define('b.template', ['handlebars'], function(Handlebars) {
  ...
  var templates = Handlebars.templates = Handlebars.templates || {};
  templates['b.template'] = template;
  var partials = Handlebars.partials = Handlebars.partials || {};
  partials['b.template'] = template;
  return template;
}
经过一点阅读,我相信这些都是命名模板(我理解这不是最佳实践),但插件会像这样生成它们,我不想手动编辑生成的文件来删除这些名称,以防将来模板发生变化,我的团队中的其他人不得不重新生成它们

现在,我想从单个文件加载我编译的Handlebar模板,并将它们与RequireJS一起使用。在经历了很多麻烦之后,我终于找到了一些似乎有效的方法:

require.config({
  paths: {
    'handlebars': '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.min',
    'template': 'template'
  },
  shim: {
    'handlebars': {
      exports: 'handlebars'
    },
    'template': {
      exports: ['a.template','b.template']
    },
    'a.template': ['template'],
    'b.template': ['template'],
  }
});
define(['a.template', 'b.template'],
    function (aTemplate, bTemplate) {
... 
但是,我在加载页面时看到一个错误:

未捕获类型错误:未定义不是函数

我在RequireJS中找到了“getGlobal”函数(我认为这是尝试的拆分)。因此,“template”的exports属性是数组而不是字符串,这似乎是一个问题

这些模板看起来像我所期望的那样工作


我不确定我所做的是否是错误的,是否有更好的方法从单个文件加载多个已编译模板


我是否在RequireJS或JKNAK的maven插件中发现了一个bug?

我在没有JavaScript错误的情况下完成了以下工作

require.config({
  paths: {
    'handlebars': '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.min',
    'a.template': 'template',
    'b.template': 'template'
  },
  shim: {
    'handlebars': {
      exports: 'handlebars'
    }
  }
});
define(['a.template', 'b.template'],
    function (aTemplate, bTemplate) {
... 

为什么要导出:['a.template','b.template']。当您希望在require调用中返回一些global,并且我认为global中没有类似于“a.template”的内容时,可以使用这个函数。。。。这可能是由于字符串中有点“.”而导致问题。把这个拿开,告诉我们它是否有效…它不起作用。不知何故,似乎是导出通知了垫片中的以下行“a.template”是一个函数而不是一个文件。如果没有导出行,页面将停止工作,并且我看到错误,例如“加载资源失败:服务器响应状态为404(未找到)”,“未捕获错误:脚本错误:a.template”您的意思是模板名称中的点导致了问题吗?