Сделал кастомизацию через env

This commit is contained in:
Ilia Miheev
2026-07-26 14:08:41 +03:00
parent 572ddc35fc
commit d22178e516
15 changed files with 331 additions and 30 deletions
+90
View File
@@ -0,0 +1,90 @@
const fs = require('fs')
const path = require('path')
const ROOT = path.resolve(__dirname, '..')
const ENV_PATH = path.join(ROOT, '.env')
const OUT_PATH = path.join(ROOT, 'public', 'config.js')
const DEFAULTS = {
VUE_APP_NAME: 'irandom',
VUE_APP_TITLE: 'irandom',
VUE_APP_BRAND_URL: 'https://git.imiheev.online/admin/irandom',
VUE_APP_LOGO_URL: '/logo.png',
VUE_APP_COLOR_PRIMARY: '#c9a66b',
VUE_APP_COLOR_ACCENT: '#e6c566',
VUE_APP_COLOR_BG: '#1a1815',
VUE_APP_COLOR_SURFACE: '#2e2820',
VUE_APP_COLOR_SURFACE_RAISED: '#3a3228',
VUE_APP_COLOR_TEXT: '#ffffff',
VUE_APP_COLOR_TEXT_MUTED: '#c8c0b4',
VUE_APP_COLOR_DANGER: '#ee5c5c',
VUE_APP_COLOR_LINK: '#4a6a8a',
VUE_APP_COLOR_BORDER: '#4a4034'
}
function parseEnvFile(filePath) {
if (!fs.existsSync(filePath)) {
return {}
}
const result = {}
const lines = fs.readFileSync(filePath, 'utf8').split(/\r?\n/)
for (const line of lines) {
const trimmed = line.trim()
if (!trimmed || trimmed.startsWith('#')) {
continue
}
const eq = trimmed.indexOf('=')
if (eq === -1) {
continue
}
const key = trimmed.slice(0, eq).trim()
let value = trimmed.slice(eq + 1).trim()
if (
(value.startsWith('"') && value.endsWith('"')) ||
(value.startsWith("'") && value.endsWith("'"))
) {
value = value.slice(1, -1)
}
result[key] = value
}
return result
}
function buildConfig(env) {
const pick = (key) => env[key] || process.env[key] || DEFAULTS[key]
return {
name: pick('VUE_APP_NAME'),
title: pick('VUE_APP_TITLE'),
brandUrl: pick('VUE_APP_BRAND_URL'),
logoUrl: pick('VUE_APP_LOGO_URL'),
colors: {
primary: pick('VUE_APP_COLOR_PRIMARY'),
accent: pick('VUE_APP_COLOR_ACCENT'),
bg: pick('VUE_APP_COLOR_BG'),
surface: pick('VUE_APP_COLOR_SURFACE'),
surfaceRaised: pick('VUE_APP_COLOR_SURFACE_RAISED'),
text: pick('VUE_APP_COLOR_TEXT'),
textMuted: pick('VUE_APP_COLOR_TEXT_MUTED'),
danger: pick('VUE_APP_COLOR_DANGER'),
link: pick('VUE_APP_COLOR_LINK'),
border: pick('VUE_APP_COLOR_BORDER')
}
}
}
const fileEnv = parseEnvFile(ENV_PATH)
const config = buildConfig(fileEnv)
const payload = JSON.stringify(config, null, 2)
const output = `/* Generated by scripts/generate-config.js — do not edit by hand */
window.__APP_CONFIG__ = ${payload};
`
fs.writeFileSync(OUT_PATH, output, 'utf8')
console.log(`Wrote ${path.relative(ROOT, OUT_PATH)}`)