Exporting Modules
Declarative web global rootExports
and noConflict()
uRequire allows you to easily export root (global) variables, along with noConflict()
on the Web side.
Simplified rootExports
uRequire can generate the rootExports
boilerplate. You can declaratively export one (or more) global variables from your UMD/AMD module on the web side.
You simply include an object literal on the top of your (source) module file like this:
({urequire: { rootExports: 'uBerscore' } });
Or use an array :
({urequire: { rootExports: ['uBerscore', '_B']}});
in case you want many global vars.
These globals be created as keys on 'root' (eg window
on browsers, global
on nodejs), with the module as the value (possibly overwriting existing keys).
Alternativelly, if you dont want to pollute your modules with export
ing info, you can handle it in the config, in the bundle.dependencies.exports.root
key.
Generated noConflict
functionality
You can inject code to your module, that provides the familiar jQuery inspired noConflict()
function to your module. With noConflict
enabled, your module saves the existing root keys before exporting onto them. Then it can return them to their original value, if you call noConflict()
which in turn returns the module.
Again, you do this declaratively:
({
urequire: {
rootExports: ['_B', 'uBerscore'],
noConflict: true
}
});
At some point in your code, you can call var myB = _B.noConflict();
which will revert all rootExports variables to their original values, returning the module which you can store elsewhere (eg myB
).
In future uRequire versions you'll be able to a) pass an 'exclude' array param & b) do a rootExports()
to re-export root vars.
dependencies.exports.bundle, a dependencies-injection mechanism:
With dependencies.exports.bundle
config option you can declare bundle-wide global-looking dependencies, that work on Web & nodejs. These are implicitly available in all your modules, without repeating the require
s.
For example, if you use ['lodash', 'backbone', 'myLib', ...]
in all your bundle modules, just use
dependencies:
exports: bundle: ['lodash', 'backbone', 'myLib']
and its saving you from having to require 'em in every module of your bundle.
If you want to have precise control over the variables that hold you exported modules, use this format:
dependencies: exports: bundle: {
'lodash': '_',
'backbone': 'Backbone',
'myLib': ['myLib', 'myLibOtherName']
}
Most times, uRequire can discover the variable names, if its 'define'd even once.