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

MacBook M2执行npm run dev遇ERR_REQUIRE_ESM错误求助

问题成因
  • internal-ip 包已升级为纯ES模块(ESM),而你的webpack.dev.js采用CommonJS(CJS)规范编写,直接用require()加载ESM模块违反Node.js的模块加载规则,触发报错。
  • 新MacBook M2搭载的Node.js版本通常较新,对ESM和CJS的兼容性校验更严格,旧项目的配置逻辑未适配这一变化。
解决思路

方案一:将webpack配置改为ESM格式

  1. 要么把webpack.dev.js的后缀改成.mjs,要么在项目根目录的package.json中添加"type": "module"(注意这会让所有.js文件默认按ESM解析,可能影响其他配置文件)。
  2. 把文件里的require()替换为import语法,示例:
    // 原代码
    const internalIp = require('internal-ip');
    // 修改后
    import internalIp from 'internal-ip';
    

方案二:降级internal-ip到支持CommonJS的版本

  1. 卸载当前版本:
    npm uninstall internal-ip
    
  2. 安装兼容CJS的旧版本(比如v6.x系列,该版本同时支持两种模块规范):
    npm install internal-ip@6.2.0
    

方案三:用动态import()替代require()

在webpack.dev.js中使用Node.js的动态import语法加载internal-ip,这种方式允许在CJS文件中加载ESM模块:

// 替换原有的require语句
(async () => {
  const internalIp = await import('internal-ip');
  // 后续使用internalIp的逻辑写在这里
})();

注意:如果webpack配置需要同步用到该模块的结果,需调整代码逻辑适配异步加载。

额外排查点

  • 执行npm ls internal-ip查看该包是直接引入还是被其他webpack插件间接引入,确认是否存在其他依赖的模块规范冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:41:25