我在两个域下有脚本:
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.
我看到的原因是:浏览器尝试从/admin/superUser.js
加载main.mydomain.com
,但js应该从user.mydomain.com
加载。
user.js
如下所示
define(['./admin/superUser'], function(superUser) {
....
})
如何配置requirejs以从第二个域加载文件?
答案 0 :(得分:2)
它不会像你那样工作,因为依赖关系中的相对路径是相对于模块名称解释的,而不是模块路径。
您将 $http({
method: 'POST',
url: url,
data: data,
responseType: 'arraybuffer'
}).success(function (response, status, headers, config) {
var blob = new Blob([response], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
var filename = headers('Content-Disposition').split('filename=')[1];
var config = {
data: blob,
filename: filename,
};
FileSaver.saveAs(config);
})
加载为http://user.mydomain.com/scripts/user.js
。因此,当RequireJS解释user
时,它会占用模块名称./admin/superUser
的目录部分,该目录部分为空并向其添加user
,因此您将获得模块名称admin/superUser
,这是未在admin/superUser
中定义,因此RequireJS通过向其添加paths
并在结尾添加baseUrl
来构建路径。
这样做的一种方法是访问模块名称空间目录下.js
的模块层次结构,这样你就可以把它放在路径而不是中。您现在http://user.mydomain.com/scripts
的路径:
user
然后将模块'userlib': 'http://user.mydomain.com/scripts'
的请求替换为user
的请求。因此,现在将在模块名称userlib/user
下访问user.js
。当此模块请求userlib/user
时,模块名称的目录部分为./admin/superUser
,请求的最终模块名称为userlib
。整个模块名称未在userlib/admin/superUser
中定义,但前缀paths
已定义,因此RequireJS使用前缀构建最终URL userlib
。