Separate environment configs (#6597)
* Separate environment configs * wip * wip * test * plugins * test * test * .sequelizerc, unfortunately can't go through /utils/environment due to not supporting TS * docker-compose -> docker compose * fix: .local wipes .development * Add custom validation message for invalid SECRET_KEY (often confused)
This commit is contained in:
39
server/utils/environment.ts
Normal file
39
server/utils/environment.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import dotenv from "dotenv";
|
||||
|
||||
let environment: Record<string, string> = {};
|
||||
|
||||
const envPath = path.resolve(process.cwd(), `.env`);
|
||||
const envDefault = fs.existsSync(envPath)
|
||||
? dotenv.parse(fs.readFileSync(envPath, "utf8"))
|
||||
: {};
|
||||
|
||||
// Load environment specific variables, in reverse order of precedence
|
||||
const environments = ["production", "development", "local", "test"];
|
||||
|
||||
for (const env of environments) {
|
||||
const isEnv = process.env.NODE_ENV === env || envDefault.NODE_ENV === env;
|
||||
const isLocalDevelopment =
|
||||
env === "local" &&
|
||||
(process.env.NODE_ENV === "development" ||
|
||||
envDefault.NODE_ENV === "development");
|
||||
|
||||
if (isEnv || isLocalDevelopment) {
|
||||
const resolvedPath = path.resolve(process.cwd(), `.env.${env}`);
|
||||
if (fs.existsSync(resolvedPath)) {
|
||||
environment = {
|
||||
...environment,
|
||||
...dotenv.parse(fs.readFileSync(resolvedPath, "utf8")),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
process.env = {
|
||||
...envDefault,
|
||||
...environment,
|
||||
...process.env,
|
||||
};
|
||||
|
||||
export default process.env;
|
||||
Reference in New Issue
Block a user