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
谢谢,你为我节省了很多时间!