index.cjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use strict';
  2. const fs = require('fs');
  3. const path = require('path');
  4. const appRoot = require('app-root-dir');
  5. const dotenv = require('dotenv');
  6. const dotenvExpand = require('dotenv-expand');
  7. const dotEnvBase = path.join(appRoot.get(), ".env");
  8. function getEnvironment({ nodeEnv, buildTarget } = {}) {
  9. let raw = {};
  10. const stringified = {};
  11. const webpack = { "process.env": stringified };
  12. const NODE_ENV = typeof nodeEnv === "undefined" ? process.env.NODE_ENV : nodeEnv;
  13. const BUILD_TARGET = typeof nodeEnv === "undefined" ? process.env.BUILD_TARGET : buildTarget;
  14. const dotenvFiles = [
  15. BUILD_TARGET && NODE_ENV && `${dotEnvBase}.${BUILD_TARGET}.${NODE_ENV}.local`,
  16. BUILD_TARGET && NODE_ENV && `${dotEnvBase}.${BUILD_TARGET}.${NODE_ENV}`,
  17. BUILD_TARGET && NODE_ENV !== "test" && `${dotEnvBase}.${BUILD_TARGET}.local`,
  18. BUILD_TARGET && `${dotEnvBase}.${BUILD_TARGET}`,
  19. NODE_ENV && `${dotEnvBase}.${NODE_ENV}.local`,
  20. NODE_ENV && `${dotEnvBase}.${NODE_ENV}`,
  21. NODE_ENV !== "test" && `${dotEnvBase}.local`,
  22. dotEnvBase
  23. ].filter(Boolean);
  24. dotenvFiles.forEach((dotenvFile) => {
  25. if (fs.existsSync(dotenvFile)) {
  26. const config = dotenv.config({
  27. path: dotenvFile
  28. });
  29. raw = Object.assign({}, raw, dotenvExpand.expand(config).parsed);
  30. }
  31. });
  32. Object.keys(raw).forEach((key) => {
  33. stringified[key] = JSON.stringify(raw[key]);
  34. });
  35. return { raw, stringified, webpack };
  36. }
  37. exports.getEnvironment = getEnvironment;