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

使用Jest测试带Lambda Layer的AWS Lambda时的路径与语法错误排查

解决Lambda Layer路径映射与Jest ES模块语法错误问题

一、修复模块路径映射错误

Lambda运行时会将Layer挂载到/opt/nodejs,但本地测试环境不存在该路径,需在hoge1/src/jest.config.ts中配置路径映射,让Jest能定位到本地的db模块:

export default {
  // 保留原有其他配置
  moduleNameMapper: {
    '^/opt/nodejs/dist/Db$': '<rootDir>/../../nodeLayer/db/dist/db/index.js'
  },
  moduleFileExtensions: ['ts', 'js', 'json']
};

注:<rootDir>对应hoge1/src目录,路径需根据实际目录层级调整。

二、解决ES模块语法错误

出现Cannot use import statement outside a module,多是因为Jest默认处理CommonJS,但db模块编译后为ES模块,可按以下步骤调整:

1. 配置Jest转译规则

确保已安装ts-jest和@types/jest,然后在jest.config.ts中添加转译配置:

export default {
  // 保留原有其他配置
  preset: 'ts-jest',
  transform: {
    '^.+\\.tsx?$': 'ts-jest'
  },
  extensionsToTreatAsEsm: ['.ts'],
  moduleNameMapper: {
    '^/opt/nodejs/dist/Db$': '<rootDir>/../../nodeLayer/db/dist/db/index.js',
    '^(\\.{1,2}/.*)\\.js$': '$1' // 处理ES模块的.js后缀导入
  },
  testEnvironment: 'node'
};

2. 处理db模块的ES模块标识

如果nodeLayer/db/package.json中设置了"type": "module",需在Jest配置中添加规则避免忽略该模块转译:

export default {
  // 保留原有其他配置
  transformIgnorePatterns: ['/node_modules/(?!../nodeLayer/db)']
};

3. 调整TypeScript编译配置

可修改nodeLayer/db/tsconfig.json,让输出模块格式与Jest兼容:

{
  "compilerOptions": {
    "module": "CommonJS", // 若需ES模块则设为ESNext,需配合Jest的ES模块配置
    "target": "ES2020",
    "outDir": "./dist/db",
    "rootDir": "./src"
  }
}

三、验证配置

修改完成后运行测试命令,确认问题解决:

npm run test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:27:05