You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决NestJS使用file-type库时的Error [ERR_REQUIRE_ESM]错误

解决NestJS中使用file-type库的ESM兼容问题

问题根源

file-type从v16版本开始改为纯ESM模块,而NestJS默认编译输出CommonJS格式,导致运行时出现require() of ES Module not supported的错误。

解决方案

方案1:使用动态import加载模块

在你的UploadService里,改用动态import的方式引入file-type的方法,CommonJS模块支持这种加载方式:

async validateFileType(buffer: Buffer) {
  const { fileTypeFromBuffer } = await import('file-type');
  const fileType = await fileTypeFromBuffer(buffer);
  // 这里写你的文件类型验证逻辑,比如判断mime类型
  return fileType?.mime === 'image/jpeg' || fileType?.mime === 'image/png';
}

这种方式不需要修改项目配置,直接在代码层面适配,适合快速解决问题。

方案2:将NestJS项目改为ESM格式

如果想长期适配ESM模块,可以调整项目配置:

  1. 修改package.json,添加"type": "module"
  2. 修改tsconfig.json:
    • 将module设为ESNext
    • 将target设为ES2020或更高版本
    • 将moduleResolution设为NodeNext
  3. 修改nest-cli.json,在compilerOptions里添加"tsConfigPath": "./tsconfig.json"
  4. 调整启动脚本,比如用node --loader ts-node/esm dist/main.js启动编译后的文件

方案3:降级file-type到支持CommonJS的版本

如果不想改代码或配置,可以安装最后一个支持CommonJS的v15版本:

npm install file-type@15

安装后就能继续用原来的静态import方式:

import { fileTypeFromBuffer } from 'file-type';

内容的提问来源于stack exchange,提问作者Victor Hugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:49:56