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

Jest测试AWS Lambda时@aws-crypto/sha256-js解构Sha256报错

解决Jest测试@aws-crypto/sha256-js时的解构错误

这个问题核心是Jest的模块解析逻辑和Lambda运行时不一致,导致@aws-crypto/sha256-js的导出在测试环境下无法被正确识别,以下是具体解决方案:

1. 直接使用命名导入替换默认导入

把原来的默认导入改成命名导入,跳过默认导出的解析问题:

// 原代码
import crypto from '@aws-crypto/sha256-js';
const { Sha256 } = crypto;

// 修改后
import { Sha256 } from '@aws-crypto/sha256-js';

这是最直接的修复方式,大部分情况下能解决问题。

2. 配置Jest模块映射指向编译后的文件

如果必须保留默认导入,在Jest配置文件(jest.config.js/jest.config.ts)中添加模块映射,让Jest加载包的CommonJS版本:

module.exports = {
  // 其他已有配置...
  moduleNameMapper: {
    '^@aws-crypto/sha256-js$': '@aws-crypto/sha256-js/build/index.js'
  }
};

3. 统一TypeScript与Jest的模块系统配置

检查tsconfig.json的模块设置,确保和Jest的模块解析逻辑匹配:

  • 如果Jest用默认的CommonJS模式,tsconfig里设置:
{
  "compilerOptions": {
    "module": "CommonJS",
    "moduleResolution": "Node"
  }
}
  • 如果项目用ES模块,需要给Jest开启ES模块支持:
// jest.config.js
module.exports = {
  extensionsToTreatAsEsm: ['.ts'],
  transform: {
    '^.+\\.tsx?$': ['ts-jest', { useESM: true }]
  }
};

同时在package.json里加上"type": "module"。

4. 升级或回退包版本

部分版本的@aws-crypto/sha256-js可能存在模块导出的兼容性问题,尝试升级到最新稳定版:

npm install @aws-crypto/sha256-js@latest

或者回退到3.0.0这类已知兼容的版本。

5. 排查导出结构(调试用)

如果以上方法都无效,在测试文件里打印导入的模块内容,确认实际导出结构:

import * as crypto from '@aws-crypto/sha256-js';
console.log(crypto);

根据打印结果调整解构方式,比如如果输出是{ default: { Sha256 } },就改成const { Sha256 } = crypto.default;。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:54:08