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; + }) });