我正在创建一个名为 tepper 的 super 测试替代方案。我正在尝试将包发布为 ESM 和 CJS。我遇到的问题是库的使用者无法找到类型定义。
为了测试它,我创建了一个脚本(您可以找到它 here ),它生成一个全新的 NestJS 项目,并尝试通过使用相对路径在本地安装它来使用该库(npm install --save-dev ../../../..
)
问题是我遇到了TS2307:找不到模块“tepper”或其相应的类型声明
错误(here您可以在 Github Actions 上看到该错误)。
我已导出 package.json 中的类型正如我所料:
{
"exports": {
".": {
"types": "./dist/types/tepper.d.ts",
"require": "./dist/cjs/tepper.js",
"import": "./dist/esm/tepper.js",
"default": "./dist/esm/tepper.js"
}
}
}
谢谢!
最佳答案
关键点是tsconfig中的resolvePackageJsonExports
。引用https://www.typescriptlang.org/tsconfig#resolvePackageJsonExports .
在您的项目中,由于 moduleResolution
和 module
的值而未启用它。所以你有两个选择,
-
- 在文件 test/e2e/nestjs/project-name/tsconfig.json 中,设置以下内容。
"module": "NodeNext",
"moduleResolution": "NodeNext",
"resolvePackageJsonExports": true,
-
- 在tepper的主packages.json中使用经典的
types
字段,可以避免由于moduleResolution
和module
的变化而影响其他事情.
- 在tepper的主packages.json中使用经典的
"types": "./dist/types/tepper.d.ts",
关于javascript - 如何导出类型定义并通过本地包的 npm 链接使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77304312/