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格式
- 要么把
webpack.dev.js的后缀改成.mjs,要么在项目根目录的package.json中添加"type": "module"(注意这会让所有.js文件默认按ESM解析,可能影响其他配置文件)。 - 把文件里的
require()替换为import语法,示例:// 原代码 const internalIp = require('internal-ip'); // 修改后 import internalIp from 'internal-ip';
方案二:降级internal-ip到支持CommonJS的版本
- 卸载当前版本:
npm uninstall internal-ip - 安装兼容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
相关产品推荐
相关产品推荐

