simpler-browser-require is an even simpler, node.js-like require() for the browser. It is not an asynchronous script loader, and it only works with absolute paths (hence simpler).
Wrapping each module in a require.register call:
require.register('my/module/id', function (require, exports, module) {
// module code here
});...allows the require function to return the module's public contents:
var lib = require('my/module/id');...exposed by decorating the exports object:
var myModuleVar = 'my module';
exports.myModuleMethod = function() {
return myModuleVar;
};...or overwritting the exports object completely:
function MyModule() {
this.myVar = 'my instance var';
};
MyModule.prototype.myMethod = function() {
return this.myVar;
};
module.exports = MyModule;Passing a string (instead of a function) to require.register enables lazy evaluation of module contents. The module will be parsed and evaluated only when require'd:
require.register('my/module/id', "function (require, exports, module) {\n exports.foo = 'foo';\n}");The raw source is retrievable via require.raw(path):
localStorage.setItem('my/module/id', window.require.raw('my/module/id'));
window.require.register('my/module/id', localStorage.getItem('my/module/id'));
// ...
var myModule = require('my/module/id');
console.log(myModule.foo); //=> 'foo'