build-web-iife.mjs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { existsSync } from 'node:fs'
  2. import { mkdir } from 'node:fs/promises'
  3. import { dirname, join, resolve } from 'node:path'
  4. import { fileURLToPath } from 'node:url'
  5. import { createRequire } from 'node:module'
  6. const scriptDir = dirname(fileURLToPath(import.meta.url))
  7. const sourceRoot = resolve(scriptDir, '..')
  8. const packageDir = resolve(sourceRoot, process.argv[2] || 'packages/compat/web')
  9. const entry = join(packageDir, 'src', 'global.ts')
  10. const excalidrawStub = join(scriptDir, 'excalidraw-iife-stub.ts')
  11. const outDir = join(packageDir, 'dist')
  12. const fileName = 'flyfish-file-viewer-web.iife.js'
  13. const requireFromPackage = createRequire(join(packageDir, 'package.json'))
  14. if (!existsSync(entry)) {
  15. throw new Error(`Missing web global entry: ${entry}`)
  16. }
  17. await mkdir(outDir, { recursive: true })
  18. const { build } = await import(requireFromPackage.resolve('vite'))
  19. await build({
  20. configFile: false,
  21. publicDir: false,
  22. logLevel: 'warn',
  23. define: {
  24. 'process.env.NODE_ENV': JSON.stringify('production'),
  25. 'process.env': JSON.stringify({ NODE_ENV: 'production' })
  26. },
  27. resolve: {
  28. alias: {
  29. // Keep script-tag compatibility bundles framework-free. The official
  30. // Excalidraw exporter depends on React peers, while core already has a
  31. // built-in SVG fallback for this exact lightweight/offline scenario.
  32. '@excalidraw/excalidraw': excalidrawStub
  33. },
  34. dedupe: ['@file-viewer/core']
  35. },
  36. build: {
  37. emptyOutDir: false,
  38. minify: 'esbuild',
  39. sourcemap: false,
  40. target: 'es2019',
  41. lib: {
  42. entry,
  43. name: 'FlyfishFileViewerWeb',
  44. formats: ['iife'],
  45. fileName: () => fileName
  46. },
  47. rollupOptions: {
  48. output: {
  49. exports: 'named',
  50. extend: true
  51. }
  52. }
  53. }
  54. })
  55. console.log(`[web-iife] Built ${join(outDir, fileName)}`)