RequireJS:如何从多个域加载js?

RequireJS:如何从多个域加载js?,requirejs,Requirejs,我有两个域下的脚本: main.mydomain.com - /scripts/ - entry.js - userManager.js user.mydomain.com - /scripts/ - user.js - admin/ - superUser.js entry.js: requirejs.config({ baseUrl: '/scripts/', paths: { 'userManager':

我有两个域下的脚本:

main.mydomain.com
- /scripts/
    - entry.js
    - userManager.js


user.mydomain.com
- /scripts/
    - user.js
    - admin/
        - superUser.js
entry.js:

requirejs.config({
    baseUrl: '/scripts/',
    paths: {
        'userManager': 'userManager.js',
        'user': 'http://user.mydomain.com/scripts/user'
    },
    deps: ['userManager']
});
当我将它们全部部署到一个域中时,一切正常。但是当它们位于两个域下时,不会加载/admin/superUser.js

我看到的原因是:浏览器试图从
main.mydomain.com
加载
/admin/superUser.js
,但js应该从
user.mydomain.com
加载

user.js
如下所示

define(['./admin/superUser'], function(superUser) {
 ....
})

如何配置requirejs以从第二个域加载文件?

它的工作方式与您的工作方式不同,因为依赖项中的相对路径是相对于模块名而不是模块路径进行解释的

您可以加载
http://user.mydomain.com/scripts/user.js
作为
用户
。因此,当RequireJS解释
/admin/superUser
时,它会获取模块名
user
的目录部分,该部分为空,并将
admin/superUser
添加到其中,因此,您将获得模块名
admin/superUser
,该模块名未在
路径中定义,因此RequireJS通过将
baseUrl
添加到模块名中并在末尾添加
.js
来为其构建路径

一种可行的方法是访问
http://user.mydomain.com/scripts
位于模块名称空间的目录下,因此您可以将其放置在路径中,而不是
用户的路径中现在:

'userlib': 'http://user.mydomain.com/scripts'

然后将模块
user
的请求替换为
userlib/user
的请求。因此,
user.js
现在将以模块名
userlib/user
访问。当此模块请求
/admin/superUser
时,模块名称的目录部分为
userlib
,请求的最终模块名称为
userlib/admin/superUser
。在
路径中未定义整个模块名称,但定义了前缀
userlib
,因此RequireJS使用前缀构建最终URL,即
http://user.mydomain.com/scripts/admin/superUser.js

谢谢,你为我节省了很多时间!