You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node版本兼容:require('node:util')在Node14报错,需Babel/Rollup转换?

Node 14 环境运行构建代码时出现 node:util 模块找不到的问题

环境信息

本地构建环境

  • @babel/core: ^7.24.5
  • rollup: ^4.18.0
  • node: v20.12.1
  • pnpm: 8.15.3
  • npm: 10.5.0
  • OS: Darwin

服务器运行环境

  • node: v14.17

问题现象

在 Node 20 环境构建代码,部署到 Node 14 环境运行时,代码中本该调用 require('util'),实际却出现了 require('node:util') 的调用。在 Node 14 环境执行测试命令时直接报错:

▶ node -e "require('node:util')" # node 14
internal/modules/cjs/loader.js:892
  throw err;
  ^

Error: Cannot find module 'node:util'

已尝试的配置与测试

Babel 配置(.babelrc)

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": false,
        "targets": { "node": "14.17" },
        "useBuiltIns": "entry",
        "corejs": "3.37"
      }
    ],
    ["@babel/preset-typescript"]
  ]
}

Rollup Babel 插件的两种尝试配置

尝试1

babel({
  extensions: ['.js', 'ts'],
  babelHelpers: "bundled",
  exclude: 'node_modules/**'
}),

尝试2

babel({
  extensions: ['.js', 'ts'],
  babelHelpers: "bundled",
  include: ['node_modules/**/ldapjs/**/*', 'src/**'],
  exclude: 'node_modules/**'
}),

问题分析

node:util 这种带 node: 前缀的模块导入方式是 Node.js 16+ 才支持的特性,Node 14 并不识别这种语法。出现问题的核心原因:

  1. 构建环境为 Node 20,部分依赖(比如ldapjs)在该环境下的代码使用了 node:util 导入方式;
  2. 当前 Rollup+Babel 配置存在逻辑矛盾——尝试2中include指定了要处理ldapjs,但exclude: 'node_modules/**'会覆盖该规则,导致ldapjs的代码完全没被 Babel 处理;
  3. 虽然@babel/preset-env配置了目标环境为 Node 14,但因为没处理到使用node:util的代码,无法将其转换为 Node 14 支持的require('util')。

解决方案

1. 修正 Rollup Babel 插件的配置逻辑

移除矛盾的exclude规则,确保ldapjs的代码能被 Babel 处理。修改后的配置示例:

babel({
  extensions: ['.js', 'ts'],
  babelHelpers: "bundled",
  include: ['src/**', 'node_modules/**/ldapjs/**/*']
}),

说明:exclude: 'node_modules/**'会覆盖所有node_modules下的include规则,必须移除才能让Babel处理指定的依赖代码。

2. 确保 Babel 转换生效

@babel/preset-env 7.x 版本已支持将node:前缀的导入转换为普通导入,只要配置生效就能完成转换。如果调整后仍有问题,可检查是否有其他依赖也使用了node:前缀导入,需要将这些依赖也加入include规则。

3. 验证产物

构建完成后直接查看生成的代码,确认是否还有require('node:util')的调用,确保转换完全生效。

内容的提问来源于stack exchange,提问作者yhding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:35:04