📜  ERR_REQUIRE_ESM (1)

📅  最后修改于: 2023-12-03 14:41:00.334000             🧑  作者: Mango

ERR_REQUIRE_ESM

当你在运行JavaScript代码的时候,可能会出现 ERR_REQUIRE_ESM 的错误信息。这是因为新版本的Node.js默认支持ES模块(ECMAScript模块化)。ES模块与Node.js老版本中的CommonJS模块的语法规则略有不同,因此会出现一些错误。

什么是ESM?

ESM,即ECMAScript模块,是一种新的JavaScript模块方案,它已经被列入了ECMAScript标准。ESM与CommonJS有着不同的语法及一系列功能,比如动态导入、异步加载等。如果你想在Node.js中使用ES模块,需要在代码中加入 type="module" 标记。

解决ERR_REQUIRE_ESM错误

在Node.js中使用ES模块会遇到很多坑,解决方法如下:

  1. 在package.json文件中设置:"type": "module" ,这样Node.js即可识别为ES模块。

  2. 对于导入模块的语法,需要使用ES模块的语法规则。

    • 使用import引入模块。例如:

      import {readFile} from 'fs/promises';
      
    • 如果你引入的是CommonJS模块,可以使用以下语法:

      import fs from 'fs';
      const readFile = fs.promises.readFile;
      
  3. 使用Node.js提供的 --experimental-modules 标记运行代码。

    node --experimental-modules index.js
    
  4. 如果你使用的第三方模块不支持ES模块,需要使用 esm 这个库。

    npm install esm --save-dev
    

    然后使用以下命令运行代码:

    node -r esm index.js
    

    可以考虑使用ES模块的第三方库,比如 axioslodash 等。

总之,切换到ES模块是Node.js未来发展的趋势,我们需要逐步适应。加强对ES模块的学习,将会有决定性的意义。