Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Adobe CQ5中使用require.js处理客户端依赖关系_Javascript_Backbone.js_Requirejs_Aem_Chaplinjs - Fatal编程技术网

Javascript 在Adobe CQ5中使用require.js处理客户端依赖关系

Javascript 在Adobe CQ5中使用require.js处理客户端依赖关系,javascript,backbone.js,requirejs,aem,chaplinjs,Javascript,Backbone.js,Requirejs,Aem,Chaplinjs,我想知道是否有人有在Adobe CQ5平台上使用require.js的经验。我正在编写一个基于Chaplin.js(主干网)的单页应用程序,它将集成到我们正在开发的其他基于CQ5的网站中。卓别林需要使用像AMD/Common.js这样的模块系统,我想确保我编译的javascript文件在CQ5的clientlibs中可用。在加载到我的javascript模块之前,它是否像在clientlibs中添加require.js作为依赖项那样简单?如果有人有这样做的经验,将不胜感激 我已将其作为一种更好地

我想知道是否有人有在Adobe CQ5平台上使用require.js的经验。我正在编写一个基于Chaplin.js(主干网)的单页应用程序,它将集成到我们正在开发的其他基于CQ5的网站中。卓别林需要使用像AMD/Common.js这样的模块系统,我想确保我编译的javascript文件在CQ5的clientlibs中可用。在加载到我的javascript模块之前,它是否像在clientlibs中添加require.js作为依赖项那样简单?如果有人有这样做的经验,将不胜感激

我已将其作为一种更好地组织所有模块的解决方案来实施,例如:

//public/js/modules/myModule.js
define('myModule',[ /* dependencies */] ,function( /* stuff here */ ))
在以下组件中:

<% //components/component.jsp %>
<div>
  <!-- stuff here -->
</div>
最后,我配置了require(
config.js
),并将JSs模块存储在一个新的不同设计文件夹中。在关闭
后定位已编译的JS,以确保JS始终位于HTML之后的底部

<!-- page/body.jsp -->
...
  <cq:includeClientLib js="specialclientlibs.footer"/>
</body>

...

解决了在执行JS之前“准备好”所有内容的问题。我在为clienlibs编译工具管理的这个异步东西上遇到了一些问题,在生产中,问题是不同的,但是在开发中,CQ编译JS的顺序使我在JS的顺序方面产生了一些缺陷。这个问题确实比解释要复杂一点,因为JS的数量确实很大,团队也是如此,但简单地说,这是我迄今为止发现的最好的方法。

这个想法

我认为您可以使用其中一个AMDSHIM编译您的Chaplin.js,使其自包含,将它所需的所有依赖项包装在函数范围内,将入口点作为全局变量公开(这是一个糟糕的做法,但CQ总是这样做…),然后在普通clientlib中使用compiled.js:

AMD垫片

示例

以下是我们如何使其中一个LIB独立的示例:

基本上,在源代码级别,库“需要”其他模块,就像往常一样。然而,编译后,生成的chunar.js文件包含了它所需要的一切,甚至包装了一个与AMD兼容的轻量级实现

请在此处查看编译文件:

和源代码:

备选方案

或者,我们在项目中所做的只是在amdshim下面使用,而不是在真正的require.js下面使用,而不是编译您正在使用的每个独立/自包含的lib。因此,在cq组件级别,您可以像往常一样调用require()函数:

require(['foo/bar'], function(){});
amd垫片不会立即向模块发送http请求,而是等待其他人加载模块

然后在页面底部,我们收集所有依赖项,将需求发送给服务器端处理程序(scriptmananger)进行动态合并(通过内部调用r.js):


我们使用的AMDSIM:

,我认为需要和clitLIB是相同问题的两个工具。如果你手动添加到模板中,JS会很好地发挥作用。您可以随时放弃clientlibs&只需根据任何其他站点使用require?我是@anotherdave的。ClientLib在过去一直存在缺陷,尤其是在缩小规模方面。我的建议是使用像RequireJS这样的客户端技术来处理客户端的问题。
require(['foo/bar'], function(){});
var paths = [];
for (var path in amdShim.waiting){
     paths.push(path);
}
document.write('/scriptmananger?' + paths.join(','));