From c3674625d98929c950e433f409cd9be9b20b9a73 Mon Sep 17 00:00:00 2001 From: Gustavo Alves Date: Fri, 29 Dec 2017 00:34:38 +0000 Subject: [PATCH] permitting multi environments --- babel-plugin-dotenv/index.js | 11 ++++++++--- .../test/fixtures/beta-env/.babelrc | 9 +++++++++ babel-plugin-dotenv/test/fixtures/beta-env/.env | 2 ++ .../test/fixtures/beta-env/.env.beta | 1 + .../test/fixtures/beta-env/.env.development | 1 + .../test/fixtures/beta-env/source.js | 3 +++ .../test/fixtures/filename-from-env_file/.anyname | 2 ++ .../test/fixtures/filename-from-env_file/.babelrc | 9 +++++++++ .../test/fixtures/filename-from-env_file/source.js | 3 +++ babel-plugin-dotenv/test/test.js | 14 ++++++++++++++ 10 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 babel-plugin-dotenv/test/fixtures/beta-env/.babelrc create mode 100644 babel-plugin-dotenv/test/fixtures/beta-env/.env create mode 100644 babel-plugin-dotenv/test/fixtures/beta-env/.env.beta create mode 100644 babel-plugin-dotenv/test/fixtures/beta-env/.env.development create mode 100644 babel-plugin-dotenv/test/fixtures/beta-env/source.js create mode 100644 babel-plugin-dotenv/test/fixtures/filename-from-env_file/.anyname create mode 100644 babel-plugin-dotenv/test/fixtures/filename-from-env_file/.babelrc create mode 100644 babel-plugin-dotenv/test/fixtures/filename-from-env_file/source.js diff --git a/babel-plugin-dotenv/index.js b/babel-plugin-dotenv/index.js index d43d29b..b81f7e1 100644 --- a/babel-plugin-dotenv/index.js +++ b/babel-plugin-dotenv/index.js @@ -18,10 +18,15 @@ module.exports = function (data) { var configFile = options.filename ? options.filename : '.env'; if (path.node.source.value === options.replacedModuleName) { + var babelEnv = process.env.BABEL_ENV; + var env = (!babelEnv || babelEnv === 'development') ? 'development' : 'production'; + var platformPath = configFile + '.' + env; + + if (process.env.ENV_FILE) { + platformPath = process.env.ENV_FILE; + } + var config = dotEnv.config({ path: sysPath.join(configDir, configFile), silent: true }) || {}; - var platformPath = (process.env.BABEL_ENV === 'development' || process.env.BABEL_ENV === undefined) - ? configFile + '.development' - : configFile + '.production'; var config = Object.assign(config, dotEnv.config({ path: sysPath.join(configDir, platformPath), silent: true })); path.node.specifiers.forEach(function(specifier, idx){ diff --git a/babel-plugin-dotenv/test/fixtures/beta-env/.babelrc b/babel-plugin-dotenv/test/fixtures/beta-env/.babelrc new file mode 100644 index 0000000..ccad36c --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/beta-env/.babelrc @@ -0,0 +1,9 @@ +{ + "plugins": [ + "babel-plugin-transform-es2015-modules-commonjs", + ["../../../", { + "replacedModuleName": "babel-dotenv", + "configDir": "test/fixtures/beta-env" + }], + ] +} diff --git a/babel-plugin-dotenv/test/fixtures/beta-env/.env b/babel-plugin-dotenv/test/fixtures/beta-env/.env new file mode 100644 index 0000000..0a8c6a9 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/beta-env/.env @@ -0,0 +1,2 @@ +API_KEY=abc123 +DEV_USERNAME=username diff --git a/babel-plugin-dotenv/test/fixtures/beta-env/.env.beta b/babel-plugin-dotenv/test/fixtures/beta-env/.env.beta new file mode 100644 index 0000000..4a00d42 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/beta-env/.env.beta @@ -0,0 +1 @@ +DEV_USERNAME=foobar diff --git a/babel-plugin-dotenv/test/fixtures/beta-env/.env.development b/babel-plugin-dotenv/test/fixtures/beta-env/.env.development new file mode 100644 index 0000000..1b46714 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/beta-env/.env.development @@ -0,0 +1 @@ +DEV_USERNAME=userdonthavename diff --git a/babel-plugin-dotenv/test/fixtures/beta-env/source.js b/babel-plugin-dotenv/test/fixtures/beta-env/source.js new file mode 100644 index 0000000..5b6a022 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/beta-env/source.js @@ -0,0 +1,3 @@ +import { API_KEY, DEV_USERNAME } from 'babel-dotenv'; +console.log(API_KEY); +console.log(DEV_USERNAME); diff --git a/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.anyname b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.anyname new file mode 100644 index 0000000..0a8c6a9 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.anyname @@ -0,0 +1,2 @@ +API_KEY=abc123 +DEV_USERNAME=username diff --git a/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.babelrc b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.babelrc new file mode 100644 index 0000000..26edf25 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/.babelrc @@ -0,0 +1,9 @@ +{ + "plugins": [ + "babel-plugin-transform-es2015-modules-commonjs", + ["../../../", { + "replacedModuleName": "babel-dotenv", + "configDir": "test/fixtures/filename-from-env_file" + }] + ] +} diff --git a/babel-plugin-dotenv/test/fixtures/filename-from-env_file/source.js b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/source.js new file mode 100644 index 0000000..5b6a022 --- /dev/null +++ b/babel-plugin-dotenv/test/fixtures/filename-from-env_file/source.js @@ -0,0 +1,3 @@ +import { API_KEY, DEV_USERNAME } from 'babel-dotenv'; +console.log(API_KEY); +console.log(DEV_USERNAME); diff --git a/babel-plugin-dotenv/test/test.js b/babel-plugin-dotenv/test/test.js index c2f7725..c90791a 100644 --- a/babel-plugin-dotenv/test/test.js +++ b/babel-plugin-dotenv/test/test.js @@ -58,4 +58,18 @@ describe('myself in some tests', function() { var result = babel.transformFileSync('test/fixtures/replaced-module-name-not-provided/source.js') expect(result.code).to.be('\'use strict\';\n\nvar _fancyDotenv = require(\'fancy-dotenv\');\n\nvar _fancyDotenv2 = _interopRequireDefault(_fancyDotenv);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }') }) + + it('should load a specific env file according to ENV_FILE', function(){ + process.env['ENV_FILE'] = '.anyname'; + var result = babel.transformFileSync('test/fixtures/filename-from-env_file/source.js') + expect(result.code).to.be('\'use strict\';\n\nconsole.log(\'abc123\');\nconsole.log(\'username\');') + process.env['ENV_FILE'] = undefined; + }) + + it('should load let .env.beta overwrite .env', function(){ + process.env['ENV_FILE'] = '.env.beta'; + var result = babel.transformFileSync('test/fixtures/beta-env/source.js') + expect(result.code).to.be('\'use strict\';\n\nconsole.log(\'abc123\');\nconsole.log(\'foobar\');') + process.env['ENV_FILE'] = undefined; + }) });