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

Webpack配置target:'node'与type:'module'时报require未定义错误

问题原因

你已将body-parser等依赖配置为Webpack的externals外部依赖(即不将这类依赖打包进最终产物),Webpack默认对Node环境的外部依赖会生成CommonJS规范的require调用代码。即使项目根目录package.json设置了"type": "module",Webpack默认也不会自动切换外部依赖的加载方式为ES模块的import语法,因此打包产物中混进了CommonJS专属的require语法,在ESM运行环境下执行就会触发ReferenceError: require is not defined报错。
项目未经过Webpack处理时可以正常运行,是因为Node原生会根据"type": "module"配置自动识别ES模块语法,同时处理依赖加载逻辑,不需要通过Webpack生成的加载代码调用依赖。

解决方案
  • 方案1:调整Webpack配置输出纯ES模块产物,强制外部依赖使用ESM语法加载
    在Webpack配置中新增如下参数即可:
    // webpack.config.js
    export default {
      target: 'node',
      output: {
        module: true,
        // 保留你原来的其他output配置,比如filename、path等
      },
      externalsType: 'module',
      // 保留你原来的externals配置,比如externals: ['body-parser', 'express']等
      experiments: {
        outputModule: true // Webpack 5需要开启该实验特性,支持输出ESM格式产物
      }
      // 保留你原来的其他配置项
    }
    
  • 方案2:兼容CommonJS格式运行
    保持当前Webpack配置不变,将打包后输出的JS文件扩展名从.js改为.cjs,Node会自动将该文件识别为CommonJS模块,允许使用require语法加载依赖。
  • 方案3:取消外部依赖配置
    删掉Webpack配置中的externals相关配置项,让Webpack把所有Node服务依赖都打包进最终产物,不会生成外部依赖的require调用代码,仅会增大产物体积,不影响运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:05