From 2615e12af0c1f84e90cee4898c2a363f80945f30 Mon Sep 17 00:00:00 2001 From: johtela Date: Thu, 31 Oct 2024 16:57:33 +0200 Subject: [PATCH] Add .env file support --- .gitignore | 1 + src/backend.ts | 30 ++++++++++++++++++++++++++++++ src/server.ts | 1 + 3 files changed, 32 insertions(+) diff --git a/.gitignore b/.gitignore index 22f891a..2e3c00f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ backend lib testOut dev.* +.env diff --git a/src/backend.ts b/src/backend.ts index 806d0a9..d32f5d5 100644 --- a/src/backend.ts +++ b/src/backend.ts @@ -10,7 +10,11 @@ * [Express.js applications]: https://expressjs.com/en/5x/api.html#app */ //#region -c backend imports +import * as path from 'path' +import * as fs from 'fs' import * as exp from 'express' +import * as cfg from './config' +import * as log from './logging' //#endregion /** * ## Express Middleware @@ -52,4 +56,30 @@ export function invalidateBackend() { app = undefined delete require.cache[bundle] } +} +/** + * ## Read `.env` file + * + * If the root folder contains a file called `.env` load environment variables + * from it. + */ +const varDefRE = /^([A-Za-z]\w*)\s*\=\s*(.+)$/ + +export function loadEnvFile() { + let envpath = path.resolve(cfg.getOptions().baseDir, ".env") + if (fs.existsSync(envpath)) { + let content = fs.readFileSync(envpath, 'utf-8').split(/\r?\n/) + for (let i = 0; i < content.length; ++i) { + let line = content[i].trim() + if (line && !line.startsWith("#")) { + let match = line.match(varDefRE) + if (match) + process.env[match[1]] = match[2] + else { + log.warn("Invalid line skipped in .env file:\n" + line) + log.info("Correct format is =\n") + } + } + } + } } \ No newline at end of file diff --git a/src/server.ts b/src/server.ts index 866c76b..e714bf8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -63,6 +63,7 @@ export function start(opts: cfg.Options) { }) } app.use(exp.static(opts.outDir)) + bak.loadEnvFile() app.use(bak.backend) app.get('/litscript', notifyHandler) let { host, port } = opts.serveOptions