Dojo amd在运行时加载跨域模块
我想从www上的一个特设服务器加载Dojo1.9 amd模块,但直到运行时(使用url参数),我才知道从哪里加载 本质上,我想做与此等效的事情:Dojo amd在运行时加载跨域模块,dojo,amd,Dojo,Amd,我想从www上的一个特设服务器加载Dojo1.9 amd模块,但直到运行时(使用url参数),我才知道从哪里加载 本质上,我想做与此等效的事情: require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) { // use SomeRandomModule }); 捷径 当涉及到模块系统和相关路径时,可能会有一些意想不到的怪癖,我还没有充分使用它来说明: require([ "//host/
require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) {
// use SomeRandomModule
});
捷径
当涉及到模块系统和相关路径时,可能会有一些意想不到的怪癖,我还没有充分使用它来说明:
require([ "//host/myext/mod1/mod2.js" ],function(mod2){
// If current webpage is http:// or https:// or file://
// it tries to use the same protocol
});
更好的方法
将require()
配置为将以特定包名(例如foo
)开头的所有模块视为来自特定URL。在入门页面中,类似于:
<script src="dojo/dojo.js"
data-dojo-config="packages:[{name:'myext',location:'//host/js/myext'}], async: 1, >
</script>
如果您使用的是Dojo引导安装,则可以避免触摸您的数据Dojo config
,而是将其放在run.js
启动文件中:
require({
baseUrl: '',
packages: [
'dojo',
'dijit',
'dojox',
'myapp',
{ name: 'myext', location: '//host/js/myext', map: {} }
]
}, [ 'myapp' ]);
太棒了……我不知道你可以使用//语法引用模块。它可以工作,但当远程模块具有仅存在于远程服务器上的依赖项时,它会阻塞。我将继续并标记您的完整答案,但您对如何解决远程模块的依赖关系有何想法?我不确定是否有办法使可传递依赖关系正常工作。。。也许是
package.json
值的魔力?我怀疑,即使跨域包有东西告诉您它需要什么包,它也只会声明名称,并且仍然由您告诉dojo到哪里获取数据。。。
require({
baseUrl: '',
packages: [
'dojo',
'dijit',
'dojox',
'myapp',
{ name: 'myext', location: '//host/js/myext', map: {} }
]
}, [ 'myapp' ]);