解决使用 json-server 报错:The requested module 'node:util' does not provide an export named 的方法

在使用 json-server 时,可能会遇到如下错误:

The requested module 'node:util' does not provide an export named 'XXX'

该错误通常与 Node.js 版本和模块解析机制有关,特别是在使用 ESM(ECMAScript 模块)语法时,可能导致旧版本的 Node.js 无法正确解析模块。

一、问题原因分析

1.1 Node.js 版本不兼容

json-server 依赖于 Node.js 的某些内置模块,例如 node:util。如果你使用的 Node.js 版本过旧(通常是 12.x 或 14.x 版本),可能无法正确解析这些模块,导致无法加载相应的导出内容。

Node.js 从 12.x 版本开始支持 ESM 模块,但在较旧的版本中,ESM 模块的支持不完全,可能导致在使用 import 语法时出现模块解析错误。

1.2 ESM 和 CommonJS 模块的兼容问题

json-server 和其他依赖项可能会使用 ESM 语法,但你的项目或 Node.js 版本使用的是 CommonJS 模块。这可能会导致模块导入导出时的冲突。

二、解决方案

2.1 更新 Node.js 版本

最简单的解决方案是更新你的 Node.js 版本到最新的稳定版本。最新版本的 Node.js 对 ESM 模块的支持更加完善,可以避免 node:util 导出的问题。

  1. 检查当前 Node.js 版本:

    在终端中运行以下命令检查当前使用的 Node.js 版本:

    node -v

    如果版本低于 16.x,建议升级 Node.js。

  2. 更新 Node.js:

    • 如果你使用的是 Node Version Manager(nvm),可以通过以下命令更新 Node.js:

      nvm install node
    • 或者直接从 Node.js 官网(此处不插入链接)下载最新的 LTS 版本并安装。
  3. 验证安装:

    更新完成后,重新运行 node -v,确保已经安装了最新版本。

2.2 强制使用 CommonJS 模块(适用于不升级 Node.js 的场景)

如果你无法更新 Node.js,或者需要在旧版本的 Node.js 中使用 json-server,可以通过调整模块类型来解决问题。

  1. 将项目切换到 CommonJS:

    在你的项目根目录下,找到 package.json 文件,并确保没有 type: "module" 的配置。这样 Node.js 会将所有的 .js 文件解析为 CommonJS 模块。

  2. 修改模块导入语法:

    确保在所有使用 require() 的地方继续使用 CommonJS 风格的导入方式,而不是 import 语法。示例如下:

    const util = require('util');

2.3 使用 Babel 进行转译

如果你需要在较旧的 Node.js 版本中使用 ESM 语法,可以使用 Babel 将 ESM 转译为 CommonJS 模块格式。

  1. 安装 Babel:

    在项目中安装 Babel 及其相关依赖:

    npm install --save-dev @babel/core @babel/preset-env @babel/node
  2. 配置 Babel:

    创建一个 .babelrc 配置文件,内容如下:

    {
     "presets": ["@babel/preset-env"]
    }
  3. 使用 Babel 运行代码:

    使用 Babel 来运行你的代码,确保 ESM 语法可以在旧版本的 Node.js 中正确运行:

    npx babel-node your-script.js

2.4 重新安装 json-server

有时候,安装包的依赖可能未正确配置或损坏,导致模块无法正确加载。可以尝试重新安装 json-server。

  1. 删除 node_modules 和 package-lock.json:

    首先,删除现有的 node_modules 文件夹和 package-lock.json 文件:

    rm -rf node_modules package-lock.json
  2. 重新安装依赖:

    然后,重新运行 npm install 以安装所有依赖项:

    npm install
  3. 重新运行 json-server:

    重新尝试运行 json-server,检查问题是否解决。

四、总结

在使用 json-server 时遇到 The requested module 'node:util' does not provide an export named 错误,通常是由于 Node.js 版本不兼容或 ESM 与 CommonJS 模块的冲突导致的。通过更新 Node.js 版本、调整模块导入语法或使用 Babel 进行转译,可以有效解决该问题。如果问题依然存在,尝试重新安装依赖也可能会有所帮助。