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

Serverless部署nodejs18.x Lambda时ES6与CommonJS兼容问题

Serverless部署Node.js 18.x Lambda的ES6/CommonJS兼容问题解决

问题根源

  • 未在package.json中设置type: module时,Node.js默认以CommonJS模式运行,代码中使用ES6的import语法会触发SyntaxError: Cannot use import statement outside a module错误。
  • 设置type: module后,项目被识别为ES模块环境,但Serverless框架自动生成的s_tag_file.js依赖CommonJS的require语法,而ES模块环境不支持require,因此出现ReferenceError: require is not defined in ES module scope错误。

可行解决办法

1. 改用CommonJS语法适配项目

将代码中的ES6模块语法(import/export)替换为CommonJS语法(require/module.exports),同时删除package.json中的type: module配置。
示例代码修改:

// 原ES6写法
import { helper } from './utils.js';
export const handler = async (event) => {
  // 业务逻辑
};

// 修改为CommonJS写法
const { helper } = require('./utils.js');
module.exports.handler = async (event) => {
  // 业务逻辑
};

2. 禁用Serverless的自动标签生成功能

若坚持使用ES6模块,可在serverless.yaml中关闭框架的自动标签注入功能(s_tag_file是框架用于监控追踪的自动生成文件):

service: your-service-name
provider:
  name: aws
  runtime: nodejs18.x
  # 禁用日志标签注入
  disableLogs: true
  # 关闭Lambda追踪功能,避免生成依赖CommonJS的文件
  tracing:
    lambda: false

注意:关闭该功能可能会影响Serverless的部分监控与追踪能力,需根据自身需求判断是否适用。

3. 升级Serverless框架至最新版本

部分旧版本的Serverless框架对Node.js 18.x的ES模块支持存在兼容性问题,升级到最新稳定版可能已修复该问题。执行以下命令升级:

npm update -g serverless

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:16