0
votes

I want to load Dojo1.9 amd modules from an ad-hoc server on the www, but I won't know from where until runtime (with url params).

In essence, I want to do the equivalent of this:

require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) {
    // use SomeRandomModule
});
1

1 Answers

1
votes

Quick and dirty way

Might have some unexpected quirks when it comes to the module system and relative paths, I haven't used it enough to say:

require([ "//host/myext/mod1/mod2.js" ],function(mod2){
    // If current webpage is http:// or https:// or file:// 
    // it tries to use the same protocol
});

Better way

Configure require() to treat all modules that start with a certain package name (e.g. foo) as coming from a particular URL. From your starter page, something like:

<script src="dojo/dojo.js" 
    data-dojo-config="packages:[{name:'myext',location:'//host/js/myext'}], async: 1, >
</script>

This lets you vastly improve your first example to:

require([ "myext/mod1/mod2" ],function(mod2){

});

If you are using a Dojo Bootstrap installation instead, you can avoid touching your data-dojo-config and instead put it inside the run.js startup file:

require({
    baseUrl: '',
    packages: [         
        'dojo',
        'dijit',
        'dojox',            
        'myapp',
        { name: 'myext', location: '//host/js/myext', map: {} }
    ]    
}, [ 'myapp' ]);