刘光辉
6 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
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
import { resolve } from 'node:path';
 
import vue from '@vitejs/plugin-vue';
import type { Plugin } from 'vite';
 
import { defineConfig } from 'vite';
 
const DEVELOPMENT_BASE_PATH = '/onlyoffice-plugins/0.1.0-dev/dms-qianpiye-annotator/';
const ONLYOFFICE_SDK_PATH = '/onlyoffice-sdk';
const VITE_RESOLVED_SDK_PATH = '/onlyoffice-plugins/0.1.0-dev/v1/';
 
function onlyOfficeSdkDevelopmentPlugin(): Plugin {
  return {
    apply: 'serve',
    name: 'dms-qianpiye-onlyoffice-sdk-development',
    transformIndexHtml: {
      order: 'post',
      handler(html) {
        return html
          .replace(/\.\.\/v1\/plugins\.css/g, `${ONLYOFFICE_SDK_PATH}/v1/plugins.css`)
          .replace(/\.\.\/v1\/plugins\.js/g, `${ONLYOFFICE_SDK_PATH}/v1/plugins.js`)
          // Vite resolves ../v1 against the release path before post transforms.
          .replace(new RegExp(`${VITE_RESOLVED_SDK_PATH}plugins\\.css`, 'g'), `${ONLYOFFICE_SDK_PATH}/v1/plugins.css`)
          .replace(new RegExp(`${VITE_RESOLVED_SDK_PATH}plugins\\.js`, 'g'), `${ONLYOFFICE_SDK_PATH}/v1/plugins.js`);
      },
    },
  };
}
 
export default defineConfig(({ command }) => ({
  // 开发态必须与后端 pluginsData 的 release URL 对齐,否则 Vite 会把 config.json 回退为 index.html。
  base: command === 'serve' ? DEVELOPMENT_BASE_PATH : './',
  plugins: [vue(), ...(command === 'serve' ? [onlyOfficeSdkDevelopmentPlugin()] : [])],
  publicDir: 'public',
  build: { outDir: 'dist', emptyOutDir: true },
  server: {
    host: '0.0.0.0',
    port: 4183,
    proxy: {
      [ONLYOFFICE_SDK_PATH]: {
        changeOrigin: true,
        rewrite: (path) => path.replace(ONLYOFFICE_SDK_PATH, '/sdkjs-plugins'),
        target: process.env.ONLYOFFICE_DOCS_URL ?? 'http://localhost:20000',
      },
    },
    strictPort: true,
  },
  resolve: { alias: { '@': resolve(__dirname, 'src') } },
}));