【问题标题】:Grouping shared dependencies of different AMD dependency trees with r.js使用 r.js 对不同 AMD 依赖树的共享依赖进行分组
【发布时间】:2017-11-22 23:03:49
【问题描述】:

我有一个AMD项目,基本上有以下结构:

samples/sample1/main
________________
* sharedpackage1/subfolder1/module1
* sharedpackage1/subfolder2/module1
* ./localmodule1
* ./localmodule2
* ./subfolder1/localmodule1



samples/sample2/main
________________
* sharedpackage1/subfolder2/module2
* sharedpackage2/subfolder1/subfolder1/module1
* ./localmodule1
* ./localmodule2
* ./localmodule3
* ./subfolder1/localmodule1
* ./subfolder1/localmodule2
* ./subfolder2/localmodule1



samples/sample3/main
________________
* sharedpackage2/subfolder2/subfolder1/module1
* sharedpackage2/subfolder3/module1
* ./localmodule1
* ./localmodule2
* ./localmodule3
* ./localmodule4
* ./localmodule5

...

我想使用r.js 来打包我的项目并最终得到...

  • 单个 shared.js 文件用于所有示例,其中包含 sharedpackage1sharedpackage2 中的所有模块 - 及其依赖项 - 至少在一个示例中使用
  • 每个样本一个 main.js 文件,其中包含特定于该样本的所有模块(“本地”模块)

请注意...

  • sharedpackage1sharedpackage2 是可以包含数百个不同的相互依赖模块的库
  • sharedpackage1sharedpackage2 都没有将包中的所有其他模块作为依赖项的“根”(或“主”)模块
  • sharedpackage1 中的模块可以将来自sharedpackage2 的模块作为依赖项
  • sharedpackage2 中的模块只有sharedpackage2 中的其他模块作为依赖项
  • sharedpackage1sharedpackage2 中未在任何示例中使用的模块不应包含在 shared.js
  • 特定于示例的配置应尽可能少且通用,以便在构建时使用 Node 脚本轻松生成

现在,只要每个新样本都有一个 main.js 文件作为“根”模块,那么在没有任何额外配置的情况下让我的构建脚本自动获取每个新样本应该不会太难。所以我会处理的。

我似乎无法从我找到的任何文档中弄清楚,如何创建一个单独的 shared.js 文件,该文件仅包含 sharedpackage1sharedpackage2 中使用的那些模块未定义 shared 模块的示例,我手动列出每个示例的每个 main.js 的所有单独依赖项(这不适合我的用例)。

r.js 可以做到这一点吗?如果是,我该如何实现?

【问题讨论】:

    标签: javascript node.js requirejs amd r.js


    【解决方案1】:

    我在 Github 上收到了来自 jrburke 的以下答复:

    example-multipage project 听起来最接近您的描述。 但是,它可能没有您想要的那么聪明。 “共同”层 仍然需要构建配置来列出一些顶级模块 include。它可以通过那些顶级模块跟踪模块 include 数组,所以它不需要是详尽的图 上市。

    听起来你可能想要bundles config,如果你不想要的话 想要进行example-multipage 所做的两阶段加载。但 bundles 配置可能非常冗长。

    如果您想要真正细粒度的跟踪和分组, amodro-trace 只会跟踪模块,你可以使用你的 自己的构建脚本将跟踪的模块组合到你的包中 想。转那些建好的文件还是需要费点力气的 进入可用于有效加载的运行时 requirejs 配置 虽然是捆绑包。

    对于模块图的复杂二等分没有可靠的简单答案 并分离捆绑。 r.js 不做就不是很聪明 任何花哨的源代码修改,例如,引入中间 require([]) 调用加载包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-18
      • 2012-01-21
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多