将RequireJS集成到OSGi服务器中

时间:2013-06-26 17:38:50

标签: osgi requirejs amd js-amd eclipse-virgo

注意:请不要被“OSGi”这个词吓倒。

我在基于OSGi的Virgo服务器环境中集成RequireJS(虽然细节无关紧要)。使用OSGi配置,我有一个根“OSGi包”,其中包含需要设置主视图的JavaScript。然后有依赖root的子包,每个子包都有自己需要执行的JavaScript。

我让RequireJS在根分发包中运行良好,并使用“主”文件设置主视图。

问题:但是,我不知道如何最好地初始化子包的执行。我应该添加第二个<script data-main="main" src="require.js"></script>标记,这次是在子包中启动它的JavaScript执行吗?我应该只是在子包中正常导入主JavaScript文件吗?

2 个答案:

答案 0 :(得分:0)

我发现的一种可能性,即使它是一个丑陋且不需要的解决方案,也是在根OSGi包中创建一个全局对象,它存储与根相关的路径。然后子包可以将自己的路径扩展到此对象上并重新初始化RequireJS。

root bundle中的示例:

var config = {
  paths: {
    // root bundle paths go here . . .
  }
};

require(config.requirejs);

子包中的示例:

$.extend(true, {
  paths: {
    // sub-bundle paths go here . . .
  }
}, config);

require(config.requirejs);

但我不喜欢(似乎对我而言)重新初始化RequireJS。希望有人知道更好的解决方案。

答案 1 :(得分:0)

我最终在根域中使用以下标记设置了框架的主要JavaScript资源:

<script data-main="js/main" src="<c:url value="require.js" />"></script>

。 。 。与&#34; js / main.js&#34;是:

require(['jquery'], function ($) {
  // main script goes here . . .
})

通过根包中的上述内容,子包只需使用以下命令调用自己的JavaScript:

<script>require(['sub-bundle/js/script.js'])</script>

所以我的问题的答案很简单:在子包中使用require函数!