React TypeScript项目中fluent-ffmpeg加载失败(Module not found)问题排查与解决
我之前在做类似项目时也碰到过完全一样的问题,其实这个报错背后主要是两个核心原因:要么是依赖没装全,要么是忽略了fluent-ffmpeg的运行环境限制。下面给你一步步拆解解决方案:
第一步:确认安装了fluent-ffmpeg本体包
你只装了@types/fluent-ffmpeg(类型定义包),但还缺核心的fluent-ffmpeg本体!先执行下面的命令补上:npm install fluent-ffmpeg --save类型包只是给TS提供类型提示的,真正的功能代码在本体包里,没装的话肯定会找不到模块。
第二步:注意fluent-ffmpeg的运行环境限制
这里要划重点:fluent-ffmpeg是为Node.js环境设计的,它依赖本地系统的ffmpeg二进制文件,无法直接在浏览器(React项目的前端代码)里运行。如果你是想在前端直接处理视频,那得换用浏览器兼容的库,比如@ffmpeg/ffmpeg(基于WebAssembly实现,完全在浏览器里运行),对应的类型包是@types/ffmpeg__ffmpeg,安装后就能正常在React TS项目里使用。如果你一定要用fluent-ffmpeg,那只能把视频处理逻辑放到Node.js后端服务里,前端通过API调用后端来完成视频处理操作。
第三步:尝试调整导入方式
如果上面两步都做了还是报错,试试把导入语句改成命名空间导入:import * as ffmpeg from 'fluent-ffmpeg';有时候默认导出的路径解析会出问题,这种导入方式能规避一些奇怪的模块查找错误。
第四步:清理缓存重新安装(兜底方案)
要是怀疑是node_modules里的包文件损坏,就执行下面的命令重置依赖:rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Ivan1F

