enhanced-require
More features for node.js require.
Asynchron require functions are really async. They do not use the sync node.js require, but use a async resolving and async readFile.
Create a enhanced require function
var myRequire = require("enhanced-require")(module, {
recursive: true
});
myRequire("./startup");
Usage
Than you can use them:
var fileContent = require("raw!"+__filename);
var template = require("./my-template.jade");
var html = template({content: fileContent});
var directoryRequire = require.context("raw!./subdir");
var txtFile = directoryRequire("./aFile.txt");
require.ensure(["./someFile.js"], function(require) {
var someFile = require("./someFile.js");
});
require.define(["./aDep"], function(aDep) {
aDep.run();
});
require(["./bDep"], function(bDep) {
bDep.doSomething();
});
Hot Code Replacement
require("enhanced-require")(module, {
recursive: true,
hot: true,
watch: true
})("./startup");
For hot code reloading you need to follow the hot code reloading spec.
Testing/Mocking
var er = require("enhanced-require");
it("should read the config option", function(done) {
var subject = er(module, {
recursive: true,
substitutions: {
"../lib/config.json": {
"test-option": { value: 1234 }
}
},
substitutionFactories: {
"../lib/otherConfig.json": function(require) {
return require("../lib/config.json");
}
}
})("../lib/subject");
var result = subject.getConfigOption("test-option");
should.exist(result);
result.should.be.eql({ value: 1234 });
});
Options
{
recursive: false,
resolve: {
},
substitutions: {},
substitutionFactories: {},
amd: {},
enhanced: {},
loader: {},
hot: false,
watch: false,
watchDelay: 400,
}
Future Plans
License
Copyright (c) 2012 Tobias Koppers
MIT (http://www.opensource.org/licenses/mit-license.php)