错误[ERR_REQUIRE_ESM] :不支持 ES 模块的 require()
Error [ERR_REQUIRE_ESM]: require() not supported
错误“ [ERR_REQUIRE_ESM] : require() of ES Module not supported. Instead change the require of index.js to a dynamic import() which is available in all CommonJS modules”出现错误是因为您正在导入的包已被转换为仅 ESM 包,这意味着无法再导入该包require()
。
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/borislav/Desktop/node_modules/node-fetch/src/index.js not supported Instead change the require of index.js to a dynamic import() which is available in all CommonJS modules.
您可以通过执行以下两项操作之一来解决“ [ERR_REQUIRE_ESM] : require() of ES Module not supported”:
- 使用 ESM – 使用
import foo from 'foo'
, 而不是
const foo = require('foo')
并将以下行添加到您的
package.json
文件中:"type": "module"
.
{ "type": "module", // ... "scripts": {}, "dependencies": {}, }
- 降级到使用
CommonJS
. (如果您使用 TypeScript,则首选方法)。
TypeScript
是将包的版本降级为使用 CommonJS 构建的版本。您可以通过查看终端中的错误消息来了解是哪个包导致了错误。屏幕截图中的错误消息显示
node-fetch
包导致了错误。
如果以下任何软件包导致错误,请单击链接以查找修复,否则,请继续阅读:
如果你继续使用 ES 模块,你将无法使用require()
语法导入任何其他包,你需要将你的导入语句更新为 ESM。
// 👇️ default import import fetch from 'node-fetch' // 👇️ named import import {myPackage} from 'my-package'
您还必须将以下行添加到package.json
文件中:
{ "type": "module", // 👇️ ...rest }
您可以访问这个有用的
Github 自述文件,了解有关从 CommonJS 迁移到 ESM 的更多信息。
例如,node-fetch
包已转换为 version 中的仅 ESM 包3
,因此我们必须降级到 version 2.6.7
,这是构建的最后一个版本,CommonJS
使我们能够使用
require()
语法。
npm install node-fetch@2.6.7 # 👇️ NOTE: you only need this if using TypeScript npm install --save-dev @types/node-fetch@2.x
您可以使用npm install package@X.X.X
语法来安装特定版本的包。
require()
.
如果您想详细了解此错误发生的原因和可能的修复方法,请查看此
GitHub 自述文件。
另一件需要注意的事情是你应该使用 >= 14 的 Node.js 版本。
您可以使用该node --version
命令检查您的 Node.js 版本。
node --version
如果你有旧版本的 Node.js,你可以使用它nvm
来安装长期支持的版本(如果你已经安装了它)。
nvm install --lts nvm use --lts
或者,您可以从nodejs.org 网站安装长期支持的版本
。
结论
错误“ [ERR_REQUIRE_ESM] : require() of ES Module not supported. Instead change the require of index.js to a dynamic import() which is available in all CommonJS modules”出现错误是因为您正在导入的包已被转换为仅 ESM 包,这意味着无法再导入该包require()
。