1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
| import { resolve } from "node:path";
| import { loadEnv } from "vite";
| import { defineConfig } from "./internal/vite-config/src";
| import { companies } from "./company.config";
|
| export default defineConfig(async ({ mode }) => {
| const env = loadEnv(mode, process.cwd(), 'VITE_');
| const companyKey = env.VITE_COMPANY || '';
| const company = companies[companyKey];
| const appLogo = company?.logo ?? '';
| const appFavicon = company?.favicon ?? '';
| const appApiUrl = company?.apiUrl ?? '';
| const isDev = mode === 'development';
| console.log('[company]', companyKey, '-> name:', company?.name, 'logo:', appLogo, 'api:', appApiUrl || '(from env)');
|
| const defineVars: Record<string, string> = {
| __APP_LOGO__: JSON.stringify(appLogo),
| __APP_FAVICON__: JSON.stringify(appFavicon),
| __APP_NAME__: JSON.stringify(company?.name ?? ''),
| };
| if (!isDev && appApiUrl) {
| defineVars['import.meta.env.VITE_GLOB_API_URL'] = JSON.stringify(appApiUrl);
| defineVars['import.meta.env.VITE_BASE_URL'] = JSON.stringify(new URL(appApiUrl).origin);
| }
|
| return {
| application: {},
| vite: {
| define: defineVars,
| resolve: {
| alias: {
| '@vue-office/pdf': resolve(__dirname, 'node_modules/@vue-office/pdf/lib/v3/vue-office-pdf.mjs'),
| '@vue-office/docx': resolve(__dirname, 'node_modules/@vue-office/docx/lib/v3/vue-office-docx.mjs'),
| '@vue-office/excel': resolve(__dirname, 'node_modules/@vue-office/excel/lib/v3/vue-office-excel.mjs'),
| '@vue-office/excel-css': resolve(__dirname, 'node_modules/@vue-office/excel/lib/v3/index.css'),
| '@vue-office/pptx': resolve(__dirname, 'node_modules/@vue-office/pptx/lib/v3/vue-office-pptx.mjs'),
| },
| },
| oxc: {
| enable: false,
| },
| optimizeDeps: {
| include: ["vue", "vue-router", "pinia", "ant-design-vue", "dayjs", "@vueuse/core", "axios", "@vue-office/pdf", "@vue-office/docx", "@vue-office/excel", "@vue-office/pptx"],
| exclude: ["dhtmlx-gantt", "tinymce", "bpmn-js", "bpmn-js-properties-panel", "video.js"],
| },
| build: {
| rollupOptions: {
| output: {
| manualChunks: id => {
| if (id.includes("node_modules")) {
| if (["vue", "vue-router", "pinia"].some(dep => id.includes(dep))) {
| return "vendor-vue";
| }
| if (["ant-design-vue", "@vueuse/core"].some(dep => id.includes(dep))) {
| return "vendor-ui";
| }
| if (["dayjs", "axios", "@vee-validate/zod", "zod"].some(dep => id.includes(dep))) {
| return "vendor-utils";
| }
| if (["tinymce", "@tinymce/tinymce-vue", "@form-create/ant-design-vue"].some(dep => id.includes(dep))) {
| return "vendor-editor";
| }
| if (["@vue-office"].some(dep => id.includes(dep))) {
| return "vendor-office-preview";
| }
| }
| },
| },
| },
| },
| server: {
| allowedHosts: true,
| watch: {
| ignored: ["**/node_modules/**", "**/dist/**", "**/.git/**"],
| },
| proxy: {
| "/admin-api": {
| changeOrigin: true,
| target: "http://192.168.0.10:48080",
| ws: true,
| },
| },
| },
| },
| };
| });
|
|