How to Resolve Node.js ES Module Loading Warning

Answered using GPT 40 by GPT40

Question:

(node:1494) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. (Use node --trace-warnings ... to show where the warning was created) 报这个错如何解决

Answer:

这个错误提示是因为你在使用 Node.js 加载一个 ES 模块(ESM),但你的项目配置或文件扩展名不正确。要解决这个问题,你有两个主要的选择:

选项 1:在 package.json 中设置 "type": "module"

  1. 打开你的项目根目录下的 package.json 文件。
  2. 添加或修改 "type" 字段为 "module",如下所示:
{
  "name": "your-project-name",
  "version": "1.0.0",
  "type": "module",
  // 其他配置项
}

这样,所有以 .js 结尾的文件将被视为 ES 模块。

选项 2:使用 .mjs 扩展名

如果你不想修改 package.json 文件,你可以将你的 ES 模块文件的扩展名改为 .mjs。例如,将 your-file.js 改为 your-file.mjs

其他注意事项

  1. 确保 Node.js 版本支持 ESM:ES 模块支持在 Node.js 12.x 及以上版本中可用,但推荐使用 Node.js 14.x 及以上版本以获得更好的兼容性和性能。
  2. 正确导入和导出:确保你在文件中使用了正确的 ES 模块语法,例如 importexport

示例

假设你有一个文件 index.js,内容如下:

import { myFunction } from './myModule.js';

myFunction();

你可以选择以下两种方式之一来解决问题:

方式 1:修改 package.json

{
  "name": "my-project",
  "version": "1.0.0",
  "type": "module"
}

方式 2:使用 .mjs 扩展名

index.js 重命名为 index.mjs,并确保导入的模块文件也使用 .mjs 扩展名。

import { myFunction } from './myModule.mjs';

myFunction();

通过以上任意一种方式,你应该能够解决这个警告并正确加载 ES 模块。