From 93555ceaa09b7533ef082b722b747115eaf0a3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 29 Aug 2017 23:18:02 +0200 Subject: [PATCH 1/3] Add support for dotenv --- README.md | 21 +++++++++++++++++++++ custom.js | 17 ++++++++++++++++- package.json | 1 + 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 37f2c65..4ef0b7e 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,27 @@ b.transform(envify({ })) ``` +## Loading `.env` file ## + +Envify can load a `.env` file for you using the +[dotenv](https://github.com/motdotla/dotenv) package. To enable this +functionallity, simply use the subarg syntax and include `dotenv` after +`envify`, e.g.: + +``` bash +browserify index.js -t [ envify dotenv --NODE_ENV development ] +``` + +Or if you're using the module API, you can pass `_: "dotenv"` into your +arguments like so: + +``` javascript +b.transform(envify({ + _: 'dotenv' + , NODE_ENV: 'development' +})) +``` + ## Contributors ## * [hughsk](http://github.com/hughsk) diff --git a/custom.js b/custom.js index 981ee83..0ae4863 100644 --- a/custom.js +++ b/custom.js @@ -1,8 +1,19 @@ -var esprima = require('esprima') +var dotenv = require('dotenv') + , esprima = require('esprima') + , fs = require('fs') , through = require('through') var processEnvPattern = /\bprocess\.env\b/ +var dotenvCache +function getDotenv() { + if (dotenvCache === undefined) { + dotenvCache = dotenv.parse(fs.readFileSync('.env')) + } + + return dotenvCache +} + module.exports = function(rootEnv) { rootEnv = rootEnv || process.env || {} @@ -24,6 +35,10 @@ module.exports = function(rootEnv) { var purge = args.indexOf('purge') !== -1 var replacements = [] + if (args.indexOf('dotenv') !== -1) { + envs.push(getDotenv()) + } + function match(node) { return ( node.type === Syntax.MemberExpression diff --git a/package.json b/package.json index 28e3b2d..31f2f51 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "tape": "^4.6.0" }, "dependencies": { + "dotenv": "^4.0.0", "esprima": "^4.0.0", "through": "~2.3.4" }, From 8cfb93321b0076f4a746045fe4bd9d1d669e8091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 29 Aug 2017 23:36:28 +0200 Subject: [PATCH 2/3] Add tests for dotenv flag --- .env | 1 + .npmignore | 1 + test.js | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..7999238 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +MESSAGE_FROM_DOTENV=Hello, World! diff --git a/.npmignore b/.npmignore index 5acd1cf..736e521 100644 --- a/.npmignore +++ b/.npmignore @@ -1,2 +1,3 @@ test.js .travis.yml +.env diff --git a/test.js b/test.js index 7bd5aea..baf5ac7 100644 --- a/test.js +++ b/test.js @@ -183,3 +183,29 @@ test('-t [ envify purge --argument ]', function(t) { , 'var y = process.env.argument' ].join('\n')) }) + +test('-t [ envify dotenv ]', function(t) { + var stream = envify({ argument: 'not purged' }) + var buffer = '' + + stream(__filename, { _: ['dotenv'] }) + .on('data', function(d) { buffer += d }) + .on('end', function() { + t.notEqual(-1, buffer.indexOf('var x = "Hello, World!"'), 'replaces with value from dotenv file') + t.end() + }) + .end('var x = process.env.MESSAGE_FROM_DOTENV') +}) + +test('-t [ envify dotenv --MESSAGE_FROM_DOTENV intercepted ]', function(t) { + var stream = envify({ argument: 'not purged' }) + var buffer = '' + + stream(__filename, { _: ['dotenv'], MESSAGE_FROM_DOTENV: 'intercepted' }) + .on('data', function(d) { buffer += d }) + .on('end', function() { + t.notEqual(-1, buffer.indexOf('var x = "intercepted"'), 'uses arguments before dotenv file') + t.end() + }) + .end('var x = process.env.MESSAGE_FROM_DOTENV') +}) From 84d4288d1b20879c872778c392dddea057614299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 29 Aug 2017 23:43:05 +0200 Subject: [PATCH 3/3] Stop throwing errors on missing .env file --- custom.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/custom.js b/custom.js index 0ae4863..5457172 100644 --- a/custom.js +++ b/custom.js @@ -8,7 +8,15 @@ var processEnvPattern = /\bprocess\.env\b/ var dotenvCache function getDotenv() { if (dotenvCache === undefined) { - dotenvCache = dotenv.parse(fs.readFileSync('.env')) + try { + dotenvCache = dotenv.parse(fs.readFileSync('.env')) + } catch (err) { + if (err.code === 'ENOENT') { + dotenvCache = {} + } else { + throw err + } + } } return dotenvCache