Node.js中require导入into-stream报ERR_REQUIRE_ESM错误如何解决
相关代码
const express = require('express'); const app = express(); const cors = require('cors'); const mongoose = require('mongoose'); const multer = require('multer'); const inMemoryStorage = multer.memoryStorage(); const uploadStrategy = multer({ storage: inMemoryStorage }).single('image'); const { BlockBlobClient } = require('@azure/storage-blob'); const getStream = require('into-stream');
报错信息
Node.js环境下使用require()语法导入into-stream模块时触发ESM兼容报错:
Error [ERR_REQUIRE_ESM]: require() of ES Module
在package.json中添加type: module配置后,原有CommonJS规范的require()语法无法正常运行。
可行解决方案
两种方案二选一即可,无需同时操作:
- 保留现有CommonJS代码结构(无需修改原有require语法)
into-stream从v6.0.0版本开始迭代为纯ESM包,不再对CommonJS的require()语法提供支持。如果不想调整现有代码的模块规范,直接安装支持CommonJS的最终稳定版本即可:
安装完成后原有代码不需要任何改动,可以直接正常运行。npm install into-stream@5.1.1 - 切换项目为ESM规范(可使用into-stream最新版本)
如果需要使用into-stream的高版本特性,可以把项目整体切换为ESM模块规范:- 在package.json中添加配置项:
"type": "module" - 将项目内所有
require()导入语句替换为ESM的import语法,示例:import getStream from 'into-stream'; import express from 'express'; import cors from 'cors'; // 其余依赖按相同规则替换即可
注意:ESM规范下没有CommonJS内置的
__dirname、__filename变量,如果代码中用到路径相关的全局变量,需要通过path模块搭配fileURLToPath方法自行实现。 - 在package.json中添加配置项:
内容的提问来源于stack exchange,提问作者JueViole Grace
相关产品推荐
相关产品推荐

