我无法在require.js中使用跨域模块
我在othersite.com上有一个子模块
// othersite.com/js/submodule.js
define(function() {
return { test: "Submodule here!" };
});
在othersite.com上使用该子模块的模块
// othersite.com/js/mainmodule.js
define(['./submodule'], function(SubModule) {
return {
test: "Main Module Here" + SubModule.test,
};
});
现在在mainsite.com上我有一个试图在othersite.com上引用mainmodule的模块。
// mainsite.com/js/app.js
requirejs([
'./somelocalmodule',
'./someotherlocalmodule',
'http://othersite.com:1234/js/mainmodule.js',
], function(
SomeLocalModule,
SomeOtherLocalModule,
MainModule) {
console.log("test: " + MainModule.test);
});
问题是,当require.js尝试加载submodule.js时,它失败了,因为它结合了mainmodule.js的URL。因此./submodule
变为http://othersite.com:1234/js/submodule
。然后require.js中的代码检查该URL,看到它有一个冒号,决定不添加.js
并尝试加载http://othersite.com:1234/js/submodule
当然没有.js
没有存在意味着它无法加载submodule.js
我可以在mainmodule.js中将.js
添加到./submodule
但是这样做会打败整个点,即如果我使用require.js获得了大量文件没有.js
后缀的推荐方式然后我尝试引用那些跨域我必须将otherdomain.com上的所有文件更改为非标准。
我做错了吗?有没有办法让require.js来处理这种情况?
答案 0 :(得分:1)
添加配置路径为我修复了这个
在我的HTML中
<script data-main="/js/app.js" src="/js/require.js"></script>
<script>
requirejs.config({
paths: {
othersite: '//othersite.com:1234',
},
});
</script>
然后在mainsite.com/js/app.js
// mainsite.com/js/app.js
requirejs([
'./somelocalmodule',
'./someotherlocalmodule',
'othersite/js/mainmodule.js',
], function(
SomeLocalModule,
SomeOtherLocalModule,
MainModule) {
console.log("test: " + MainModule.test);
});
答案 1 :(得分:1)
我最近遇到了类似的挑战,发现Loading Modules from Packages非常有用。
示例:
require.config({
paths: {
source1: 'https://cdnjs.cloudflare.com/ajax/libs/ractive/0.7.3',
source2: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.0.0',
source3: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.0.0',
lodash: 'lodash.min',
ractive: 'ractive.min',
jquery: 'jquery.min'
}
});
require.config({
baseUrl: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/'
});
require(['jquery'], function($) {
print('jQuery version ' + $.fn.jquery);
});
require(['source1/ractive'], function(ractive) {
console.debug('Ractive version ' + ractive.VERSION);
});
require(['source2/lodash'], function(_) {
console.debug('Lodash version ' + _.VERSION);
});
require(['source3/lodash'], function(_) {
console.debug('Lodash version ' + _.VERSION);
});
将输出:
jQuery version 2.0.0
Lodash version 3.0.0
Lodash version 2.0.0
Ractive version 0.7.3