import cp from 'vite-plugin-cp'; import { defineConfig, PluginOption, UserConfig } from 'vite'; import path, { resolve } from 'path'; import nodeResolve from '@rollup/plugin-node-resolve'; import { builtinModules } from 'module'; import napcatVersion from "napcat-vite/vite-plugin-version.js"; import { autoIncludeTSPlugin } from "napcat-vite/vite-auto-include.js"; import react from '@vitejs/plugin-react-swc'; //依赖排除 const external = [ 'silk-wasm', 'ws', 'express' ]; const nodeModules = [...builtinModules, builtinModules.map((m) => `node:${m}`)].flat(); const ShellBaseConfigPlugin: PluginOption[] = [ react({ tsDecorators: true }), autoIncludeTSPlugin({ entries: [ { entry: 'napcat.ts', dir: path.resolve(__dirname, '../napcat-core/protocol') }, { entry: 'napcat.ts', dir: path.resolve(__dirname, '../napcat-onebot/action/test') } ] }), cp({ targets: [ { src: '../napcat-native/', dest: 'dist/native', flatten: false }, { src: '../napcat-webui-frontend/dist/', dest: 'dist/static/', flatten: false }, { src: '../napcat-core/external/napcat.json', dest: 'dist/config/' }, { src: '../../package.json', dest: 'dist' }, { src: '../napcat-shell-loader', dest: 'dist' } ], }), nodeResolve(), napcatVersion(), ]; const ShellBaseConfig = (source_map: boolean = false) => defineConfig({ resolve: { conditions: ['node', 'default'], alias: { '@/napcat-core': resolve(__dirname, '../napcat-core'), '@/napcat-common': resolve(__dirname, '../napcat-common'), '@/napcat-onebot': resolve(__dirname, '../napcat-onebot'), '@/napcat-pty': resolve(__dirname, '../napcat-pty'), '@/napcat-webui-backend': resolve(__dirname, '../napcat-webui-backend'), '@/image-size': resolve(__dirname, '../image-size'), }, }, build: { sourcemap: source_map, target: 'esnext', minify: false, lib: { entry: { napcat: path.resolve(__dirname, 'napcat.ts'), 'audio-worker': path.resolve(__dirname, '../napcat-common/src/audio-worker.ts'), 'worker/conoutSocketWorker': path.resolve(__dirname, '../napcat-pty/worker/conoutSocketWorker.ts'), }, formats: ['es'], fileName: (_, entryName) => `${entryName}.mjs`, }, rollupOptions: { external: [...nodeModules, ...external] }, }, }); export default defineConfig(({ mode }): UserConfig => { if (mode === 'development') { return { ...ShellBaseConfig(true), plugins: [...ShellBaseConfigPlugin], }; } return { ...ShellBaseConfig(), plugins: [...ShellBaseConfigPlugin], }; });