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

NestJS导入crypto-js遇TypeError:无法读取undefined的'enc'属性

解决NestJS中导入crypto-js时出现的TypeError: Cannot read properties of undefined (reading 'enc')问题

针对你遇到的这个报错,结合NestJS+TypeScript的环境特性,给出几个可行的排查和解决方法:

1. 修改crypto-js的导入方式

crypto-js本质是CommonJS模块,在TypeScript环境下直接使用默认导入可能无法正确解析完整的导出对象。将导入语句改为命名空间导入:

import * as CryptoJS from 'crypto-js';

修改后重新运行项目,大部分情况下这个改动就能解决enc属性未定义的问题。

2. 调整TypeScript配置

检查项目根目录的tsconfig.json,确保以下配置项正确设置:

{
  "compilerOptions": {
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true
    // 保留其他原有配置
  }
}

这两个配置项allowSyntheticDefaultImports和esModuleInterop用于让TypeScript更好地兼容CommonJS模块的默认导入行为,避免模块解析异常。

3. 确保依赖版本匹配

如果上述方法无效,检查crypto-js和@types/crypto-js的版本是否兼容。卸载现有依赖后重新安装最新版本:

npm uninstall crypto-js @types/crypto-js
npm install crypto-js@latest @types/crypto-js@latest

版本不匹配可能导致类型定义和实际模块导出不对应,引发属性读取错误。

4. 排查Webpack自定义配置(若有)

如果项目自定义了Webpack配置,需确保crypto-js没有被tree-shaking误删,或者添加对应的externals配置:

// webpack.config.js
module.exports = {
  externals: {
    'crypto-js': 'commonjs crypto-js'
  }
};

这个场景较少见,但如果项目有特殊打包配置,可尝试此方法。

修改后的完整示例代码

import { Injectable, Logger } from '@nestjs/common';
import { CmacDto, Crc32Dto } from './dto';
import * as CryptoJS from 'crypto-js';
import { AesDecryptDto } from './dto/aesDecrypt.dto';

@Injectable()
export class CryptoUtilsService {
    private readonly logger = new Logger(CryptoUtilsService.name);
    
    decryptAESHex(data: AesDecryptDto) {
        let keyHex = CryptoJS.enc.Hex.parse(data.key);
        let ivHex = CryptoJS.enc.Hex.parse(data.iv);

        let encryptedWordArray = CryptoJS.enc.Hex.parse(
            data.encryptedData.toUpperCase(),
        );

        let encString = CryptoJS.enc.Base64.stringify(encryptedWordArray);

        let decryptedResp = CryptoJS.AES.decrypt(encString, keyHex, {
            iv: ivHex,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.NoPadding,
        });

        return CryptoJS.enc.Hex.stringify(decryptedResp).toUpperCase();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:20:42