diff --git a/client/vite.config.ts b/client/vite.config.ts
index 5546e30baa..643f20a6c2 100644
--- a/client/vite.config.ts
+++ b/client/vite.config.ts
@@ -1,66 +1,76 @@
-import { defineConfig } from 'vite';
+import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
import type { Plugin } from "vite";
// https://vitejs.dev/config/
export default defineConfig({
- server: {
- host: 'localhost',
- port: 3090,
- strictPort: false,
- proxy: {
- '/api': {
- target: 'http://localhost:3080',
- changeOrigin: true
- },
- '/auth': {
- target: 'http://localhost:3080',
- changeOrigin: true
- },
- '/oauth': {
- target: 'http://localhost:3080',
- changeOrigin: true
- }
- }
- },
- plugins: [react(), sourcemapExclude({excludeNodeModules: true})],
- publicDir: './public',
- build: {
- sourcemap: true,
- outDir: './dist',
- rollupOptions: {
- output: {
- manualChunks: id => {
- if (id.includes('node_modules')) {
- return 'vendor';
- }
+ server: {
+ host: 'localhost',
+ port: 3090,
+ strictPort: false,
+ proxy: {
+ '/api': {
+ target: 'http://localhost:3080',
+ changeOrigin: true
+ },
+ '/auth': {
+ target: 'http://localhost:3080',
+ changeOrigin: true
+ },
+ '/oauth': {
+ target: 'http://localhost:3080',
+ changeOrigin: true
+ }
+ }
+ },
+ plugins: [react(), sourcemapExclude({ excludeNodeModules: true })],
+ publicDir: './public',
+ build: {
+ sourcemap: true,
+ outDir: './dist',
+ rollupOptions: {
+ output: {
+ manualChunks: id => {
+ if (id.includes('node_modules')) {
+ return 'vendor';
+ }
+ }
+ }
+ }
+ },
+ resolve: {
+ alias: {
+ '~': path.join(__dirname, 'src/')
}
- }
}
- },
- resolve: {
- alias: {
- '~': path.join(__dirname, 'src/')
- }
- }
});
interface SourcemapExclude {
- excludeNodeModules?: boolean;
+ excludeNodeModules?: boolean;
}
export function sourcemapExclude(opts?: SourcemapExclude): Plugin {
- return {
- name: "sourcemap-exclude",
- transform(code: string, id: string) {
- if (opts?.excludeNodeModules && id.includes("node_modules")) {
- return {
- code,
- // https://github.com/rollup/rollup/blob/master/docs/plugin-development/index.md#source-code-transformations
- map: { mappings: "" },
- };
- }
- },
- };
+ return {
+ name: "sourcemap-exclude",
+ transform(code: string, id: string) {
+ if (opts?.excludeNodeModules && id.includes("node_modules")) {
+ return {
+ code,
+ // https://github.com/rollup/rollup/blob/master/docs/plugin-development/index.md#source-code-transformations
+ map: { mappings: "" },
+ };
+ }
+ },
+ };
}
+function htmlPlugin(env: ReturnType) {
+ return {
+ name: "html-transform",
+ transformIndexHtml: {
+ enforce: "pre" as const,
+ transform: (html: string): string =>
+ html.replace(/%(.*?)%/g, (match, p1) => env[p1] ?? match),
+ },
+ };
+}
diff --git a/e2e/specs/landing.spec.js b/e2e/specs/landing.spec.js
index c57023def0..c8d722e1d9 100644
--- a/e2e/specs/landing.spec.js
+++ b/e2e/specs/landing.spec.js
@@ -1,7 +1,8 @@
-import {expect, test} from '@playwright/test';
+import { expect, test } from '@playwright/test';
-test('landing page', async ({page}) => {
+
+test('landing page', async ({ page }) => {
await page.goto('http://localhost:3080/');
// expect (await page.title()).toBe('ChatGPT Clone');
- expect (await page.textContent('#landing-title')).toBe('ChatGPT Clone');
+ expect(await page.textContent('#landing-title')).toBe(import.meta.env.VITE_APP_TITLE || "ChatGPT Clone");
});
\ No newline at end of file