错误 [ERR_REQUIRE_ESM]:不支持 ES 模块的 require()

错误[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 es 模块的 esm 要求

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”:

  1. 使用 ESM – 使用import foo from 'foo', 而不是
    const foo = require('foo')并将以下行添加到您的
    package.json文件中:"type": "module".
包.json
{ "type": "module", // ... "scripts": {}, "dependencies": {}, }
  1. 降级到使用CommonJS. (如果您使用 TypeScript,则首选方法)。
如果使用,解决错误的最简单方法TypeScript是将包的版本降级为使用 CommonJS 构建的版本。

您可以通过查看终端中的错误消息来了解是哪个包导致了错误。屏幕截图中的错误消息显示
node-fetch包导致了错误。

error err require es 模块的 esm 要求

如果以下任何软件包导致错误,请单击链接以查找修复,否则,请继续阅读:

如果你继续使用 ES 模块,你将无法使用require()语法导入任何其他包,你需要将你的导入语句更新为 ESM。

索引.js
// 👇️ default import import fetch from 'node-fetch' // 👇️ named import import {myPackage} from 'my-package'

您还必须将以下行添加到package.json文件中:

包.json
{ "type": "module", // 👇️ ...rest }

您可以访问这个有用的
Github 自述文件,了解有关从 CommonJS 迁移到 ESM 的更多信息。

在撰写本文时,我发现的最佳解决方案(尤其是在使用 TypeScript 时)是降级到使用 CommonJS 构建的最新版本的包。

例如,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语法来安装特定版本的包。

安装使用 CommonJS 构建的包版本后,您将能够使用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()