我有一个使用 ESM 用 TypeScript 编写的项目。其中一些使用 Typegoose。项目代码库构建良好并运行完美,但 Mocha 无法运行测试并出现以下错误:
语法错误:未找到命名导出“Ref”。请求的模块“@typegoose/typegoose”是一个 CommonJS 模块,它可能不支持所有 module.exports 作为命名导出。 CommonJS 模块始终可以通过默认导出导入,例如使用:
从'@typegoose/typegoose'导入pkg; const { modelOptions, prop, plugin, getModelForClass, Ref, } = pkg;
即使我使用替代的导入方法,我仍然会收到有关未找到 Ref 的错误。这是我唯一有问题的 Typegoose 作品。如果我不使用 Ref Mocha,测试任何依赖于 Typegoose 的其他代码都没有问题。
tsconfig.json 有以下设置:
"module": "esnext"
"moduleResolution": "node"
package.json 有以下设置:
"type": "module",
.mocharc.jsonc 有以下集合:
"node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"],
有谁知道如何解决这个问题吗?由于代码在 Mocha 之外运行良好,我认为这是我缺少的某种配置,但我无法弄清楚它可能是什么。
好的,在 Typegoose 人员的帮助下,我找到了原因:我的 tsconfig.json 将“transpileOnly”指定为 true,这导致类型错误地导入。将“transpileOnly”设置为 false 解决了问题。