Coder Social home page Coder Social logo

babel-plugin-replace-require's Introduction

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:

$ npm 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

{
  "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

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

babel-plugin-replace-require's People

Contributors

ryan-roemer avatar rylnd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

babel-plugin-replace-require's Issues

Update `loc` in code replacement.

From @divmain ---

One other thought here - you probably want the value of node.callee.loc to remain, despite node.callee being replaced. Otherwise you'll see some strange source-map action. You could do something like:

const loc = node.callee.loc;
node.callee = _.chain(replace).clone().assign({ loc }).value();

You'd still have invalid loc values in nested nodes, but so long as the babylon.parse was not provided a filename to attach to the nodes, the information would probably be discarded in a webpack-like build context.

subdependencies are not handled

given that:

  1. file a.js requires b.js
  2. b.js requires c.js

file b will not be handled by this plugin, am I right ? if so, how can let this plugin to handle subdependencies and so on ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.