vite.config.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import path from 'node:path';
  2. import react from '@vitejs/plugin-react';
  3. import glob from 'glob';
  4. import { nodeExternals } from 'rollup-plugin-node-externals';
  5. import { Server } from 'socket.io';
  6. import type { Plugin } from 'vite';
  7. import { defineConfig } from 'vite';
  8. import dts from 'vite-plugin-dts';
  9. import { YSocketIO } from 'y-socket.io/dist/server';
  10. const excludeFiles = [
  11. '**/components/playground/*',
  12. '**/main.tsx',
  13. '**/vite-env.d.ts',
  14. ];
  15. const devSocketIOPlugin = (): Plugin => ({
  16. name: 'dev-socket-io',
  17. apply: 'serve',
  18. configureServer(server) {
  19. if (!server.httpServer) return;
  20. // setup socket.io
  21. const io = new Server(server.httpServer);
  22. io.on('connection', (socket) => {
  23. // eslint-disable-next-line no-console
  24. console.log('Client connected');
  25. socket.on('disconnect', () => {
  26. // eslint-disable-next-line no-console
  27. console.log('Client disconnected');
  28. });
  29. });
  30. // setup y-socket.io
  31. const ysocketio = new YSocketIO(io);
  32. ysocketio.initialize();
  33. },
  34. });
  35. // https://vitejs.dev/config/
  36. export default defineConfig({
  37. plugins: [
  38. react(),
  39. devSocketIOPlugin(),
  40. dts({
  41. entryRoot: 'src',
  42. exclude: [...excludeFiles],
  43. copyDtsFiles: true,
  44. }),
  45. {
  46. ...nodeExternals({
  47. devDeps: true,
  48. builtinsPrefix: 'ignore',
  49. }),
  50. enforce: 'pre',
  51. },
  52. ],
  53. build: {
  54. outDir: 'dist',
  55. sourcemap: true,
  56. lib: {
  57. entry: glob.sync(path.resolve(__dirname, 'src/**/*.{ts,tsx}'), {
  58. ignore: [...excludeFiles, '**/*.spec.ts'],
  59. }),
  60. name: 'editor-libs',
  61. formats: ['es'],
  62. },
  63. rollupOptions: {
  64. output: {
  65. preserveModules: true,
  66. preserveModulesRoot: 'src',
  67. },
  68. },
  69. },
  70. });