想象一下这个项目脚手架:
> utils.js
> module1 / controllers.js
> module1 / services.js
> module2 / controllers.js
> module2 / services.js
utils.js
define([], function(){ /* My utils functions */ });
模块1 / controllers.js
define(['../utils'], function(utils){ /* Module1 stuff */ });
模块2 / controllers.js
define(['../utils'], function(utils){ /* Module2 stuff */ });
这在非优化上下文中非常有效,因为utils.js只下载一次,无论是来自module1还是module2.但是我需要在JS文件中优化和打包每个模块.
为了得到这个,我在每个模块中添加了一个main.js文件,例如:
模块1 / main.js
define(['./controllers', './services.js'], function(){});
现在我开始使用优化工具,这是我的app.build.js
...
modules: [
{ name: "module1/main" },
{ name: "module2/main" },
]
...
好吧,我得到了我想要的行为,但我发现这两个模块都包含了utils.js代码.这种行为是正确的,因为您无法保证加载顺序.
所以,这些是我的问题:
>对此存在任何智能解决方案吗?
>如果不能跳过,有人知道requirejs是如何工作的吗?这种策略会产生任何问题吗?
解决方法:
最后,我使用构建脚本中的exclude选项得到了答案:
...
modules:[
{ name: 'utils' },
{ name: 'module1/main', exclude: ['utils'] }
{ name: 'module2/main', exclude: ['utils'] }
]
...
这样我就为utils创建了一个独立的模块,并避免使用“exclude”选项将其包含在其他模块代码中.此方法强制您手动编写此类“全局”依赖项,但它可以正常运行:)