我想获得一些关于将子模块组合成更大项目的最佳实践建议。在开发模式下,它可以正常工作,因为 require 可以即时解析所有 deps - 但是现在需要为 GWT 应用程序生成它,因为它显然很难通过回调来消耗异步内容。
结构如下(这可以单独构建并根据需要创建文件):
- main(构建所有共享库资源等)
- 组件 A(需要 main 存在但在自己的构建中排除)
- ... 成分 N
要在这样加载的应用程序中使用:
<script src='require.js'></script>
<script src='main-lib-min.js'></script>
<script src='component-a-min.js'></script>
<script src='component-n-min.js'></script>
<!-- client to all these files is a single app to kick off: -->
<script src='app.js'></script>
main 被定义为一个需要包装并在完成时触发一个事件。组件是define()
包装中的模块集合。
问题是,app.js
在解决所有引用之前不应引用任何内容。并且component-A
可能有对导出的引用,main-lib
因此不应在加载前一个脚本之前对其进行评估。
在 chrome 中,我们看到并行下载和引用错误。需要阻止它。由于r.js
构建已经预先打包了所有内容,因此工厂应该能够返回上面定义的任何模块。
即做:
var foo = require('foo');
应该没问题。
如果 app.js 创建为:
require(['foo'], function(foo){
});
然后它工作。
有没有人有生产这种组件构建/模块模式的经验?您是否会包含 main-lib 构建配置中的所有模块,modules: []
以便它们相互等待?如果您希望客户端(即 html 文件)成为添加模块的那个人怎么办?
你会改变加载吗?是否有更适合确保类似同步行为的 GWT 加载器?性能不是问题。