Right now the syntax support is very basic. It does not support these features of RequireJS:
- configuring require() by passing in a config object to it
- plugins
- require.modify
- require.nameToUrl
- require.ready (does not make sense)
require(["dependency"], function (dependency){}());
and define modules via:
require.def("moduleName", ["dependency"], function (dependency){}());
It should also support CommonJS modules that were converted to RequireJS syntax via the conversion tool in RequireJS, but I have not tested it extensively.
The changes are just in one file in the sdk, securable-module.js. So you could just grab that file if you wanted to play with it. There is a sample app in the source if you want to see it in action. Also viewing the changeset shows the diff on the securable-module.js file as well as the example app source.
The full cloned repo is available via:
hg clone http://hg.mozilla.org/users/jrburke_gmail.com/jetpack-sdk-requirejs
Why do this? Because sharing code between the browser and other environments is hard with the regular CommonJS syntax. It does not work well in the browser. The browser-based CommonJS loaders that use eval() have a worse debugging experience. Starting with the RequireJS syntax makes it easy to transfer the modules for use in the web browser, and the RequireJS code works in Node and Rhino.
I would like to add support for RequireJS plugins in Jetpack. I can see the i18n plugin and text file plugin being useful for Jetpacks. That will likely take more work though. I want to see if the basic syntax support is useful first.
I ended up not using that much RequireJS code, just some argument conversions and supporting "setting the exported value". It relies on the existing Jetpack code for paths and package support.