lazy-universal-dotenv
Version:
Robust Environment Configuration for Universal Applications.
41 lines (37 loc) • 1.49 kB
JavaScript
const fs = require('fs');
const path = require('path');
const appRoot = require('app-root-dir');
const dotenv = require('dotenv');
const dotenvExpand = require('dotenv-expand');
const dotEnvBase = path.join(appRoot.get(), ".env");
function getEnvironment({ nodeEnv, buildTarget } = {}) {
let raw = {};
const stringified = {};
const webpack = { "process.env": stringified };
const NODE_ENV = typeof nodeEnv === "undefined" ? process.env.NODE_ENV : nodeEnv;
const BUILD_TARGET = typeof nodeEnv === "undefined" ? process.env.BUILD_TARGET : buildTarget;
const dotenvFiles = [
BUILD_TARGET && NODE_ENV && `${dotEnvBase}.${BUILD_TARGET}.${NODE_ENV}.local`,
BUILD_TARGET && NODE_ENV && `${dotEnvBase}.${BUILD_TARGET}.${NODE_ENV}`,
BUILD_TARGET && NODE_ENV !== "test" && `${dotEnvBase}.${BUILD_TARGET}.local`,
BUILD_TARGET && `${dotEnvBase}.${BUILD_TARGET}`,
NODE_ENV && `${dotEnvBase}.${NODE_ENV}.local`,
NODE_ENV && `${dotEnvBase}.${NODE_ENV}`,
NODE_ENV !== "test" && `${dotEnvBase}.local`,
dotEnvBase
].filter(Boolean);
dotenvFiles.forEach((dotenvFile) => {
if (fs.existsSync(dotenvFile)) {
const config = dotenv.config({
path: dotenvFile
});
raw = Object.assign({}, raw, dotenvExpand.expand(config).parsed);
}
});
Object.keys(raw).forEach((key) => {
stringified[key] = JSON.stringify(raw[key]);
});
return { raw, stringified, webpack };
}
exports.getEnvironment = getEnvironment;
;