FormidableLabs/babel-plugin-replace-require

Name: babel-plugin-replace-require

Owner: Formidable

Description: Replace require output generated from import calls.

Created: 2016-11-18 20:59:20.0

Updated: 2016-11-23 13:46:59.0

Pushed: 2016-11-30 18:54:59.0

Homepage: null

Size: 33

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

babel-plugin-replace-require

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.

Installation

The plugin is available via npm:

m install babel-plugin-replace-require
Usage

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


lugins": [
["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.

s6 style
rt foo from "GLOBAL_REQUIRE/foo";

ommonJS style
t bar = require("REQUIRED_REQUIRE/bar");

lib/index.js: The outputted file, processed by the plugin.

s6 style
_foo = global.myBetterRequire("foo");

_foo2 = _interopRequireDefault(_foo);

tion _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ommonJS style
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


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.