【问题标题】:Integrating RequireJS into OSGi server将 RequireJS 集成到 OSGi 服务器
【发布时间】:2023-03-10 18:30:01
【问题描述】:

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

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

我的 RequireJS 在根包中运行良好,并带有一个设置主视图的“主”文件。

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

【问题讨论】:

  • 能否在需要对象的时候加上路径;子文件夹/我的对象?
  • 根路径为“resources/js/main.js”,特定子包的示例为“sub-bundle/resources/js/main.js”。
  • “初始化子包的执行”是什么意思?从您下面的答案看来,您的意思是“初始化路径配置”?
  • 我没有被 OSGi 吓倒。让我害怕的是 JavaScript 位!
  • @explunit 需要启动两个执行:主框架和子包(它们是框架的消费者)。

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


【解决方案1】:

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

根包中的示例:

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

require(config.requirejs);

子包中的示例:

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

require(config.requirejs);

但我不喜欢(在我看来)重新初始化 RequireJS。希望有人知道更好的解决方案。

【讨论】:

    【解决方案2】:

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

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

    。 . .其中“js/main.js”为:

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

    在根包中使用上述内容,子包只需调用它们自己的 JavaScript:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 2010-09-14
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2017-07-11
      • 2015-07-20
      • 2016-02-05
      相关资源
      最近更新 更多