NestJS项目import path后调用resolve报Cannot read property 'resolve' of undefined错误
问题根源
该报错是Node.js CommonJS模块与ES模块导入规则不兼容导致的。path是Node.js内置的CommonJS规范模块,默认没有ES模块格式的default导出,当你的TypeScript配置未开启CommonJS转ES模块的兼容开关时,使用import path from 'path'的默认导入语法拿到的path值为undefined,调用其方法自然会抛出异常。而require是CommonJS原生导入语法,本身就兼容CommonJS模块,因此运行正常。
解决方案
方案1:直接修改导入语法(无需改配置,立即可用)
把默认导入改为命名空间导入即可,该写法拿到的对象和require('path')完全一致:
import * as path from 'path';
方案2:开启TypeScript兼容配置
如果你要保留import path from 'path'的写法,可以修改项目根目录的tsconfig.json,在compilerOptions下新增/修改两个配置项:
{ "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true } }
开启后TypeScript编译时会自动给CommonJS模块添加兼容的default导出,默认导入语法就能正常使用。
修改完成后重启NestJS项目即可生效。
内容的提问来源于stack exchange,提问作者KAM
相关产品推荐
相关产品推荐

