From 0188cf034cac60d8d25df3015f6d6d7ab7bf8123 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 3 May 2022 13:19:38 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=E5=9C=A8=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=97=B6=E9=80=9A=E8=BF=87=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- web/assets/config.json | 3 +++ web/build/webpack.config.ts | 4 ++++ web/scripts/sync-config-from-env.js | 20 ++++++++++++++++++++ web/src/init.tsx | 17 +++++++++++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 web/assets/config.json create mode 100644 web/scripts/sync-config-from-env.js diff --git a/Dockerfile b/Dockerfile index a5567ba2..7a923bee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,4 +12,4 @@ EXPOSE 11011 RUN cd web && pnpm build -CMD http-server-spa ./web/dist index.html 11011 +CMD node scripts/sync-config-from-env.js && http-server-spa ./web/dist index.html 11011 diff --git a/web/assets/config.json b/web/assets/config.json new file mode 100644 index 00000000..51a53d0c --- /dev/null +++ b/web/assets/config.json @@ -0,0 +1,3 @@ +{ + "serviceUrl": null +} diff --git a/web/build/webpack.config.ts b/web/build/webpack.config.ts index 0c3f2c95..d1fcb3bf 100644 --- a/web/build/webpack.config.ts +++ b/web/build/webpack.config.ts @@ -79,6 +79,10 @@ const plugins: Configuration['plugins'] = [ from: path.resolve(ROOT_PATH, './assets/pwa.webmanifest'), to: 'pwa.webmanifest', }, + { + from: path.resolve(ROOT_PATH, './assets/config.json'), + to: 'config.json', + }, { from: path.resolve(ROOT_PATH, './assets/images/logo/'), to: 'images/logo/', diff --git a/web/scripts/sync-config-from-env.js b/web/scripts/sync-config-from-env.js new file mode 100644 index 00000000..8d6f3e1b --- /dev/null +++ b/web/scripts/sync-config-from-env.js @@ -0,0 +1,20 @@ +/** + * 用于 dockerfile 启动命令 + * 将环境变量的信息同步到 dist/config.json 文件中 + */ + +const fs = require('fs-extra'); +const path = require('path'); + +const envConfig = require('../assets/config.json'); // 获取默认配置 + +if (process.env.SERVICE_URL) { + envConfig.serviceUrl = process.env.SERVICE_URL; +} + +if (envConfig) { + fs.writeJsonSync(path.resolve(__dirname, '../dist/config.json'), envConfig, { + spaces: 2, + }); + console.log('从环境变量更新config完毕:', envConfig); +} diff --git a/web/src/init.tsx b/web/src/init.tsx index 65356e01..241bc48e 100644 --- a/web/src/init.tsx +++ b/web/src/init.tsx @@ -11,9 +11,12 @@ import { showErrorToasts, t, fetchGlobalConfig, + request, + isValidStr, } from 'tailchat-shared'; import { getPopupContainer } from './utils/dom-helper'; import { getUserJWT } from './utils/jwt-helper'; +import _get from 'lodash/get'; const webStorage = buildStorage(window.localStorage); setStorage(() => webStorage); @@ -54,6 +57,20 @@ setGlobalLoading((text) => { return hide; }); +/** + * 获取前端配置 + */ +request + .get('/config.json', { + baseURL: '', + }) + .then(({ data: config }) => { + if (isValidStr(_get(config, 'serviceUrl'))) { + setServiceUrl(() => _get(config, 'serviceUrl')); + } + }) + .catch(() => {}); + /** * 初始化时加载全局配置 */