Replace require output generated from import calls.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.eslintrc Initial import. Nov 18, 2016
.travis.yml Implement full transform + tests (#1) Nov 22, 2016 Version 0.0.4 Nov 30, 2016
LICENSE.txt Add caveat to README (#4) Feb 8, 2018


npm version

Replace require output generated from import calls.

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");

Related Projects


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