javascript – Requirejs – 通过不同的模块共享相同的依赖项

想象一下这个项目脚手架:

> 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”选项将其包含在其他模块代码中.此方法强制您手动编写此类“全局”依赖项,但它可以正常运行:)

上一篇:javascript – 如何获取输入数组元素jquery的所有值


下一篇:用于Web应用程序的PHP前端和Java后端?