More features for node.js require.
- loader support
require.ensure
- AMD
require
,define
(from require.js) require.context
- Hot Code Replacement
- module substitutions for mocking
Asynchron require functions are really async. They do not use the sync node.js require, but use a async resolving and async readFile.
var myRequire = require("enhanced-require")(module, {
// options
recursive: true // enable for all modules recursivly
// This replaces the original require function in loaded modules
});
// startup your application
myRequire("./startup");
Than you can use them:
// use loaders
var fileContent = require("raw!"+__filename);
// use loaders automatically
var template = require("./my-template.jade");
var html = template({content: fileContent});
// use require.context
var directoryRequire = require.context("raw!./subdir");
var txtFile = directoryRequire("./aFile.txt");
// use require.ensure
require.ensure(["./someFile.js"], function(require) {
var someFile = require("./someFile.js");
});
// use AMD define
require.define(["./aDep"], function(aDep) {
aDep.run();
});
// use AMD require
require(["./bDep"], function(bDep) {
bDep.doSomething();
});
require("enhanced-require")(module, {
recursive: true, // enable for all modules
hot: true, // enable hot code replacement
watch: true // watch for changes
})("./startup");
For hot code reloading you need to follow the hot code reloading spec.
var er = require("enhanced-require");
it("should read the config option", function(done) {
var subject = er(module, {
recursive: true,
substitutions: {
// specify the exports of a module directly
"../lib/config.json": {
"test-option": { value: 1234 }
}
},
substitutionFactories: {
// specify lazy generated exports of a module
"../lib/otherConfig.json": function(require) {
// export the same object as "config.json"
return require("../lib/config.json");
}
}
})("../lib/subject");
var result = subject.getConfigOption("test-option");
should.exist(result);
result.should.be.eql({ value: 1234 });
});
{
recursive: false,
// replace require function in required modules with enhanced require method
resolve: {
// ...
// see enhanced-resolve
// https://github.com/webpack/enhanced-resolve
},
substitutions: {},
substitutionFactories: {},
// See above
// Replace modules with mocks
// keys are resolved and have to exist
amd: {},
// The require.amd object
enhanced: {},
// The require.enhanced object
loader: {},
// additional stuff in the loaderContext
hot: false,
// enable hot code replacement
watch: false,
// Watch for file changes and issue hot replacement
watchDelay: 400,
// Time to summarize changes for watching
}
- cli tool
Copyright (c) 2012 Tobias Koppers