diff --git a/packages/babel-register/src/node.js b/packages/babel-register/src/node.js index a20514f2a1..36e07b178b 100644 --- a/packages/babel-register/src/node.js +++ b/packages/babel-register/src/node.js @@ -2,7 +2,7 @@ import deepClone from "lodash/cloneDeep"; import sourceMapSupport from "source-map-support"; import * as registerCache from "./cache"; import escapeRegExp from "lodash/escapeRegExp"; -import * as babel from "@babel/core"; +import * as babelCore from "@babel/core"; import { OptionManager, DEFAULT_EXTENSIONS } from "@babel/core"; import { addHook } from "pirates"; import fs from "fs"; @@ -10,6 +10,7 @@ import path from "path"; const maps = {}; const transformOpts = {}; +let babel = babelCore; let piratesRevert = null; function installSourceMapSupport() { @@ -100,6 +101,9 @@ register({ export default function register(opts?: Object = {}) { // Clone to avoid mutating the arguments object with the 'delete's below. opts = Object.assign({}, opts); + + if (opts.babel) babel = opts.babel; + if (opts.extensions) hookExtensions(opts.extensions); if (opts.cache === false && cache) { @@ -110,6 +114,7 @@ export default function register(opts?: Object = {}) { cache = registerCache.get(); } + delete opts.babel; delete opts.extensions; delete opts.cache; diff --git a/packages/babel-register/test/index.js b/packages/babel-register/test/index.js index a41f299e19..abf69ec95b 100644 --- a/packages/babel-register/test/index.js +++ b/packages/babel-register/test/index.js @@ -103,4 +103,20 @@ describe("@babel/register", function() { chai.expect((gen_error = require(GEN_ERROR))).to.be.ok; chai.expect(gen_error()).to.match(/gen_error\.js:2:86/); }); + + it("uses custom babel when requested", () => { + setupRegister({ + babel: { + transform() { + return { code: "module.exports = 'hello';" }; + }, + getEnv() { + return {}; + }, + version: "custom", + }, + }); + + chai.expect(require(DATA_ES2015)).to.equal("hello"); + }); });