RequireJS: Why do relative paths work for define(), but not require()? -


let's have following directory structure, , following files:

root |-- require-jquery.js +-- folder      |-- index.html      |-- main.js      +-- anothermodule.js 

in requirejs, when reference module starting ".", requirejs looks in same folder current module in, if that's subdirectory. however, if change baseurl before calling define(), requirejs map dependencies new baseurl.

you can fix setting baseurl in index.html , changing data-main path relative baseurl:

folder/index.html:

<script>     var require = {         baseurl : "../"     }; </script> <script data-main="folder/main" src="../require-jquery.js"></script> 

folder/main.js:

define(         [ "jquery", './anothermodule' ],         function($, anothermodule) {}); 

this works define(), though:

folder/main.js:

require(         [ "jquery", './anothermodule' ],         function($, anothermodule) {}); 

if try require(), requirejs anothermodule.js in root, not folder. why this, , in particular, why design difference between define() , require()?

this because define specifies module name , require not.

define can called this:

define('folder/main',         [ "jquery", './anothermodule' ],         function($, anothermodule) {}); 

the first parameter module name - explicit path module. define() implicitly specifies path, , in general using explicit path not recommended. require not take name parameter.

when include relative dependency in define() (like './anothermodule'), it's found relative module name. in case, ./anothermodule resolve folder/anothermodule.

in call require(), there no module name. relative dependencies resolved root.


Comments

Popular posts from this blog

Why does Ruby on Rails generate add a blank line to the end of a file? -

node.js - Bad Request - node js ajax post -

uitableview - Create and use custom prototype table cells in xamarin ios using storyboard -