使用r.js将不同AMD依赖关系树的共享依赖关系分组

时间:2017-11-22 23:03:49

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

我有一个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.jssharedpackage1中所有模块及其依赖关系的所有样本的单个sharedpackage2文件,至少在其中一个样本中使用
  • 每个样本一个main.js个文件,其中包含特定于该样本的所有模块(“本地”模块)

请注意......

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

现在,只要每个新样本都有一个main.js文件作为“root”模块,我的构建脚本无需任何额外配置就可以自动获取每个新样本。所以我会用它来处理。

我似乎无法从我找到的任何文档中找出,是如何创建一个仅包含来自shared.js和{{1}的模块的sharedpackage1文件在没有定义sharedpackage2模块的情况下在样本中使用的,我手动列出每个样本的每个shared的所有单独依赖项(这不适合我的用例)。

是否可以使用main.js执行此操作?如果是,我该如何实现?

1 个答案:

答案 0 :(得分:0)

我在Github上从jrburke收到了以下答案:

  

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

     

如果你不这样做,听起来你可能想要bundles config   想要进行example-multipage所做的两阶段加载。但   捆绑配置可能非常罗嗦。

     

如果你想要非常精细的跟踪和分组,   amodro-trace将只跟踪模块,您可以使用您的   自己的构建脚本将跟踪的模块组合到您的捆绑包中   想。转动那些构建的文件仍然需要一些努力   进入运行时requirejs配置,可用于有效加载   捆绑包。但

     

模块图的复杂二等分没有简单明了的答案   并分开束。就没有做而言,r.js并不是很聪明   任何花哨的源修改,例如,引入中间体   require([])调用加载包。