Fix FFmpeg import: use direct import like ImageMagick

Import FFmpeg at module level instead of dynamic import. The build now
compiles cleanly without Turbopack bundler warnings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-02-25 20:29:55 +01:00
parent 3a8b409d1d
commit 6d4426037c

View File

@@ -1,9 +1,6 @@
// Suppress Turbopack bundler warning for FFmpeg's dynamic imports
// The @ffmpeg/ffmpeg package internally uses dynamic imports that Turbopack
// flags as "too dynamic" but still work at runtime
declare const globalThis: any;
import type { ConverterEngine, WASMModuleState } from '@/types/media'; import type { ConverterEngine, WASMModuleState } from '@/types/media';
import type { FFmpeg as FFmpegType } from '@ffmpeg/ffmpeg';
import { FFmpeg } from '@ffmpeg/ffmpeg';
import { initializeImageMagick } from '@imagemagick/magick-wasm'; import { initializeImageMagick } from '@imagemagick/magick-wasm';
/** /**
@@ -17,23 +14,18 @@ const moduleState: WASMModuleState = {
/** /**
* Cached WASM instances * Cached WASM instances
*/ */
let ffmpegInstance: any = null; let ffmpegInstance: FFmpegType | null = null;
let imagemagickInstance: any = null; let imagemagickInstance: any = null;
/** /**
* Load FFmpeg WASM module * Load FFmpeg WASM module
*/ */
export async function loadFFmpeg(): Promise<any> { export async function loadFFmpeg(): Promise<FFmpegType> {
if (ffmpegInstance && moduleState.ffmpeg) { if (ffmpegInstance && moduleState.ffmpeg) {
return ffmpegInstance; return ffmpegInstance;
} }
try { try {
// Import FFmpeg at runtime to avoid static bundler analysis
// The @ffmpeg/ffmpeg package has internal dynamic imports that
// Turbopack cannot statically analyze, but they work fine at runtime
const { FFmpeg } = await import('@ffmpeg/ffmpeg');
if (!FFmpeg) { if (!FFmpeg) {
throw new Error('FFmpeg class not available'); throw new Error('FFmpeg class not available');
} }