There are often situations where you'd like to pass a different require
function into a require("foo")
call like specialOtherRequire("foo")
. This is
quite easy in CommonJS, yet challenging in ES-next import
's because the
outputted require
is not directly under user control.
This plugin allows import
statements to conditionally have the require
call
rewritten in generated output.
The plugin is available via npm:
$ npm install babel-plugin-replace-require
The options passed to the plugin should be an object of [token, code replacement string] pairs. Tokens will be matched against the import's argument; matches will be replaced as shown below.
Note: The code replacement expressions are actually parsed and inserted into the AST. It's therefore possible for the replacement expression to itself be subsequently matched/replaced by the plugin.
.babelrc: Our configuration
{
"plugins": [
["replace-require", {
"GLOBAL_REQUIRE": "global.myBetterRequire",
"REQUIRED_REQUIRE": "require('require-from-somewhere-else')"
}]
]
}
src/index.js: A source file with es6 / Node.js type imports.
// es6 style
import foo from "GLOBAL_REQUIRE/foo";
// CommonJS style
const bar = require("REQUIRED_REQUIRE/bar");
lib/index.js: The outputted file, processed by the plugin.
// es6 style
var _foo = global.myBetterRequire("foo");
var _foo2 = _interopRequireDefault(_foo);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// CommonJS style
var bar = require('require-from-somewhere-else')("bar");
This plugin was written to help implement the
module pattern in builder
archetypes for enabling dependency encapsulation.
This plugin is useful for code patterns that work in Node.js for alternate
require
's. If the code needs to run on the frontend via webpack, the
webpack-alternate-require-loader
can further process the output of this plugin into fully-resolved modules
analogous to what Node.js would do.
Contributions welcome! See CONTRIBUTING.md