diff --git a/src/babel/helpers/merge.js b/src/babel/helpers/merge.js new file mode 100644 index 0000000000..6257fdfb98 --- /dev/null +++ b/src/babel/helpers/merge.js @@ -0,0 +1,17 @@ +import merge from "lodash/object/merge"; + +export default function (dest, src) { + if (!dest || !src) return; + + return merge(dest, src, function(a, b) { + if (Array.isArray(a)) { + var c = a.slice(0); + for (var v of b) { + if (a.indexOf(v) < 0) { + c.push(v); + } + } + return c; + } + }); +} diff --git a/src/babel/tools/resolve-rc.js b/src/babel/tools/resolve-rc.js index eb3b0334cd..aa56e3c764 100644 --- a/src/babel/tools/resolve-rc.js +++ b/src/babel/tools/resolve-rc.js @@ -1,5 +1,5 @@ import stripJsonComments from "strip-json-comments"; -import merge from "lodash/object/merge"; +import merge from "../helpers/merge"; import path from "path"; import fs from "fs"; @@ -42,17 +42,7 @@ export default function (loc, opts = {}) { opts.babelrc.push(file); if (json.breakConfig) return; - merge(opts, json, function(a, b) { - if (Array.isArray(a)) { - var c = a.slice(0); - for (var v of b) { - if (a.indexOf(v) < 0) { - c.push(v); - } - } - return c; - } - }); + merge(opts, json); } var up = path.dirname(start); diff --git a/src/babel/transformation/file/index.js b/src/babel/transformation/file/index.js index f8c703b849..c030070379 100644 --- a/src/babel/transformation/file/index.js +++ b/src/babel/transformation/file/index.js @@ -19,6 +19,7 @@ import assign from "lodash/object/assign"; import Logger from "./logger"; import parse from "../../helpers/parse"; import Scope from "../../traversal/scope"; +import merge from "../../helpers/merge"; import slash from "slash"; import clone from "lodash/lang/clone"; import * as util from "../../util"; @@ -106,6 +107,9 @@ export default class File { if (!option) this.log.error(`Unknown option: ${key}`, ReferenceError); } + var envKey = process.env.BABEL_ENV || process.env.NODE_ENV || "development"; + if (opts.env) merge(opts, opts.env[envKey]); + for (let key in File.options) { let option = File.options[key]; diff --git a/src/babel/transformation/file/options.json b/src/babel/transformation/file/options.json index 34becc0f7f..0fcd36f82e 100644 --- a/src/babel/transformation/file/options.json +++ b/src/babel/transformation/file/options.json @@ -20,6 +20,11 @@ "default": {} }, + "env": { + "hidden": true, + "default": {} + }, + "moduleId": { "description": "specify a custom name for module ids", "type": "string" diff --git a/test/core/api.js b/test/core/api.js index 6c6353b42a..46c1c894e6 100644 --- a/test/core/api.js +++ b/test/core/api.js @@ -99,6 +99,36 @@ suite("api", function () { }); }); + suite("env option", function () { + test("default", function () { + assert.equal(transform("foo;", { + env: { + development: { blacklist: "strict" } + } + }).code, "foo;"); + }); + + test("BABEL_ENV", function () { + process.env.BABEL_ENV = "foo"; + assert.equal(transform("foo;", { + env: { + foo: { blacklist: "strict" } + } + }).code, "foo;"); + delete process.env.BABEL_ENV; + }); + + test("NODE_ENV", function () { + process.env.NODE_ENV = "foo"; + assert.equal(transform("foo;", { + env: { + foo: { blacklist: "strict" } + } + }).code, "foo;"); + delete process.env.NODE_ENV; + }); + }); + test("addHelper unknown", function () { var file = new File({}, transform.pipeline); assert.throws(function () {