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

import * as模块名与默认import from模块的区别及报错原因分析

两种ES模块导入语法的差异与报错原因

语法本质区别

  • import * as expressBasicAuth from 'express-basic-auth':命名空间导入,会将目标模块所有导出的内容封装为一个对象,赋值给expressBasicAuth变量。
  • import expressBasicAuth from 'express-basic-auth':默认导入,只会读取目标模块的default导出项,赋值给expressBasicAuth变量。

第二种写法报错的原因

你使用的express-basic-auth是CommonJS规范开发的包,它没有ES模块标准下的default导出,整个包的导出内容就是那个鉴权函数本身。
你当前NestJS项目的TypeScript编译配置没有开启CommonJS和ES模块的兼容映射,所以用默认导入写法拿到的expressBasicAuth实际是undefined。你在代码中直接执行expressBasicAuth(xxx)等同于调用undefined,会抛出TypeError,这个错误在异步的bootstrap函数中抛出后没有被捕获,就会触发你看到的promise unhandled error报错。

兼容方案

如果想要使用第二种默认导入的写法,可以在项目根目录的tsconfig.json中添加配置"esModuleInterop": true,该配置会自动将CommonJS包的整体导出映射为ES模块的default导出,解决两种模块规范的导入兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:48:00