vite.config.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import path from '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: [
  43. ...excludeFiles,
  44. ],
  45. copyDtsFiles: true,
  46. }),
  47. {
  48. ...nodeExternals({
  49. devDeps: true,
  50. builtinsPrefix: 'ignore',
  51. }),
  52. enforce: 'pre',
  53. },
  54. ],
  55. build: {
  56. outDir: 'dist',
  57. sourcemap: true,
  58. lib: {
  59. entry: glob.sync(path.resolve(__dirname, 'src/**/*.{ts,tsx}'), {
  60. ignore: [
  61. ...excludeFiles,
  62. '**/*.spec.ts',
  63. ],
  64. }),
  65. name: 'editor-libs',
  66. formats: ['es'],
  67. },
  68. rollupOptions: {
  69. output: {
  70. preserveModules: true,
  71. preserveModulesRoot: 'src',
  72. },
  73. },
  74. },
  75. });