Created
May 31, 2024 14:47
-
-
Save ruvasik/2adfc0a122715789b9674a285a193b85 to your computer and use it in GitHub Desktop.
Powerful loading .env* files with yarn workspaces
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// loadEnv.js | |
const dotenv = require('dotenv'); | |
const dotenvExpand = require('dotenv-expand').expand; | |
const fs = require('fs'); | |
const path = require('path'); | |
const { execSync } = require('child_process'); | |
// Функция для загрузки и расширения .env файлов с выводом для отладки | |
function loadAndExpandEnv(envPaths) { | |
envPaths.forEach(envPath => { | |
if (fs.existsSync(envPath)) { | |
const envConfig = dotenv.config({ path: envPath }); | |
const expandedEnvConfig = dotenvExpand(envConfig); | |
// Явно обновляем process.env новыми значениями | |
if (expandedEnvConfig.parsed) { | |
for (const key in expandedEnvConfig.parsed) { | |
process.env[key] = expandedEnvConfig.parsed[key]; | |
} | |
} | |
} | |
}); | |
} | |
// Получите значение NODE_ENV или установите его в 'development' по умолчанию | |
const nodeEnv = process.env.NODE_ENV || 'development'; | |
// Определите пути к .env файлам в корневом каталоге в нужном порядке | |
const rootEnvPaths = [ | |
path.resolve(__dirname, `.env.${nodeEnv}.local`), | |
path.resolve(__dirname, '.env.local'), | |
path.resolve(__dirname, `.env.${nodeEnv}`), | |
path.resolve(__dirname, '.env') | |
]; | |
// Определите пути к .env файлам в текущем рабочем пространстве в нужном порядке | |
const workspaceEnvPaths = [ | |
path.resolve(process.cwd(), `.env.${nodeEnv}.local`), | |
path.resolve(process.cwd(), '.env.local'), | |
path.resolve(process.cwd(), `.env.${nodeEnv}`), | |
path.resolve(process.cwd(), '.env') | |
]; | |
// Загрузите и расширьте переменные окружения из корневых .env файлов | |
loadAndExpandEnv(rootEnvPaths); | |
// Загрузите и расширьте переменные окружения из .env файлов в рабочем пространстве | |
loadAndExpandEnv(workspaceEnvPaths); | |
// Постройте команду из аргументов, переданных скрипту | |
const command = process.argv.slice(2).join(' '); | |
// Запустите команду с переменными окружения | |
execSync(command, { stdio: 'inherit', env: process.env }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment