javascript - 如何导出类型定义并通过本地包的 npm link 使用它们?
我正在创建一个名为 tepper 的 supertest 替代品。我正在尝试将该包同时发布为 ESM 和 CJS。我遇到的问题是,库的使用者无法找到类型定义。
为了测试它,我创建了一个脚本(你可以在这里找到它),该脚本会生成一个全新的 NestJS 项目,并尝试通过使用相对路径本地安装库(npm install --save-dev ../../../..)来使用它
问题是我遇到了一个 TS2307: Cannot find module 'tepper' or its corresponding type declarations 错误(你可以在 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"
}
}
}
谢谢!
答案#1
关键点是 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",
