diff --git a/web/package.json b/web/package.json index 2b27c1b12d..1e2807507b 100644 --- a/web/package.json +++ b/web/package.json @@ -9,7 +9,7 @@ "lint": "next lint", "fix": "next lint --fix", "eslint-fix": "eslint --fix", - "prepare": "cp .env.example .env && cd ../ && node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky install ./web/.husky", + "prepare": "node ./scripts/update-env.mjs && cd ../ && node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky install ./web/.husky", "gen-icons": "node ./app/components/base/icons/script.js", "uglify-embed": "node ./bin/uglify-embed", "check-i18n": "node ./i18n/script.js" diff --git a/web/scripts/update-env.mjs b/web/scripts/update-env.mjs new file mode 100644 index 0000000000..11e4ff10e1 --- /dev/null +++ b/web/scripts/update-env.mjs @@ -0,0 +1,37 @@ +import * as fs from 'node:fs' + +function parseEnvFile(contents) { + return contents.split('\n').reduce((acc, line) => { + const [key, value] = line.split('=') + if (key) + acc.set(key.trim(), value === undefined ? '' : value.trim()) + + return acc + }, new Map()) +} + +function updateEnvironmentFile() { + const examplePath = '.env.example' + const envPath = '.env' + + const exampleContents = fs.readFileSync(examplePath, 'utf-8') + const envContents = fs.existsSync(envPath) ? fs.readFileSync(envPath, 'utf-8') : '' + + const exampleConfig = parseEnvFile(exampleContents) + const envConfig = parseEnvFile(envContents) + + exampleConfig.forEach((value, key) => { + if (!envConfig.has(key)) + envConfig.set(key, value) + }) + + // 生成新的 .env 内容 + const newEnvContents = Array.from(envConfig.entries()) + .map(([key, value]) => `${key}=${value}`) + .join('\n') + + fs.writeFileSync(envPath, newEnvContents) + console.log('.env file has been updated') +} + +updateEnvironmentFile()