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

Node.js中module.exports与JavaScript export的适用场景及互用性咨询

关于Node.js中module.exports与ES export的使用指南(针对AWS Lambda场景)

1. 核心差异:CommonJS vs ES Modules

先明确两个模块系统的本质:

  • module.exports/require()是Node.js默认的CommonJS模块系统语法,Node.js早期就支持,至今仍是多数Node.js项目(包括大量Lambda部署包)的默认选择。
  • export/import是ECMAScript(ES)标准模块系统语法,属于JS官方规范,Node.js从v12版本开始支持,但需要额外配置(比如在package.json中添加"type": "module")才能启用。

2. 二者能否互换?

不能直接互换,完全取决于你的项目模块系统配置:

  • 若项目使用默认CommonJS(无"type": "module"配置):只能用module.exports/require(),写export会直接报错。
  • 若项目配置了ES Modules(package.json中声明"type": "module"):只能用export/import,使用module.exports会报错。
  • 补充:CommonJS里还有个小写的exports,它是module.exports的引用,但如果直接给exports赋值(比如exports = {a:1})会断开引用,无法生效,必须用module.exports = {a:1}。

3. AWS Lambda中该用哪种?

取决于Lambda运行时配置和部署包的模块系统:

  • 默认场景(多数情况):Lambda的Node.js运行时默认采用CommonJS,因此用module.exports导出处理函数即可,示例:
    // Lambda处理函数(CommonJS)
    module.exports.handler = async (event) => {
      return {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!')
      };
    };
    
  • 使用ES Modules的场景:需要在部署包的package.json中添加"type": "module",同时Lambda运行时版本要选v14及以上(支持ES Modules的版本),之后用export导出处理函数:
    // Lambda处理函数(ES Modules)
    export async function handler(event) {
      return {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!')
      };
    }
    

4. 何时选择module.exports?

  • 你的项目是传统Node.js项目,未配置ES Modules(默认CommonJS环境)。
  • 你不想额外修改package.json,希望直接适配Lambda默认运行时配置,省心高效。
  • 需要兼容较旧的Node.js环境(不过Lambda目前已淘汰v12以下版本,这个场景现在很少见)。

5. 常见误区澄清

那种“export用于JS文件间模块导出,module.exports用于Lambda文件”的说法是错误的:

  • 不管是普通JS模块还是Lambda文件,选择哪种导出方式只看模块系统是CommonJS还是ES Modules,和文件用途无关。
  • 比如在CommonJS的普通JS模块里,你同样用module.exports导出;在ES Modules的Lambda文件里,你用export导出处理函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:50:27