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

升级NestJS项目至Node.js 18后导入crypto模块显示undefined的问题咨询

Node.js 18中crypto模块默认导入返回undefined的原因及解决方法

问题根源

Node.js的crypto属于CommonJS模块,而ES模块(ESM)导入CommonJS模块时,默认导出对应的是该模块module.exports上的default属性。但crypto模块本身并没有设置default导出,它的所有功能直接挂在module.exports对象上。Node.js 18对ES模块与CommonJS模块的交互规则执行更严格,和你2021年使用的旧版本Node.js处理逻辑存在差异,才导致直接用import crypto from 'crypto'拿到的是undefined。

替代方案

有两种可靠的解决方式:

  • 采用命名导入的ESM语法:

    import * as crypto from 'crypto';
    

    这种写法会将crypto模块的所有导出成员挂载到crypto对象上,效果和CommonJS的const crypto = require('crypto')完全一致。

  • 直接使用CommonJS的require语法:
    如果项目允许混用CommonJS,可以保留传统写法:

    const crypto = require('crypto');
    

另外,确认下NestJS项目package.json里的type字段设置:如果是"type": "module",优先用ESM的命名导入;如果未设置或设为"commonjs",用require语法更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:01