babel-plugin-replace-require
require
output generated from import
calls.
Replace 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.
Installation
The plugin is available via npm:
$ npm install babel-plugin-replace-require
Usage
Provide an object of token, code replacement string pairs. The code replacement expressions are actually parsed and inserted into the AST.
.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 foo = require("REQUIRED_REQUIRE/foo");
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");
Related Projects
Builder
This plugin was written to help implement the
module pattern in builder
archetypes for enabling dependency encapsulation.
Webpack
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
Contributions welcome! See CONTRIBUTING.md