bounty还有5天到期。回答此问题可获得+200声望奖励。Daniel Ramos希望引起更多的注意这个问题。
我正在创建一个名为tepper的超级测试替代方案。我正在尝试将软件包发布为ESM和CJS。我遇到的问题是库的使用者无法找到类型定义。
为了测试它,我创建了一个脚本(你可以找到它here),它生成一个全新的NestJS项目,并尝试使用相对路径(npm install --save-dev ../../../..
)在本地安装它来使用库。
问题是我有一个TS2307: Cannot find module 'tepper' or its corresponding type declarations
错误(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"
}
}
}
谢谢你,谢谢
1条答案
按热度按时间62o28rlo1#
您的脚本似乎正在执行以下操作:
1.导航到
test/e2e/nestjs
目录。1.删除
project-name
目录和clean.js
文件(如果存在)。1.全局安装NestJS CLI。
1.创建一个名为
project-name
的NestJS项目。1.创建一个
clean.js
文件,该文件读取新项目中的app.e2e-spec.ts
文件,用tepper
库替换supertest
的示例,并记录结果。1.使用Node.js运行
clean.js
并将其输出重定向到新文件app.new.e2e-spec.ts
。1.将原始
app.e2e-spec.ts
替换为新文件。1.导航到新项目目录。
1.将库作为开发依赖项安装。
1.运行端到端测试。
看起来你在package.json中导出类型方面做得很对。然而,您仍然遇到TS2307的原因可能有几个:找不到模块“tepper”或其相应的类型声明错误。
TypeScript配置:请确保您的tslog.json文件已正确设置。宣言:true选项应启用以生成相应的.d.ts文件1.
模块分辨率:TypeScript解析模块的方式由tslog.json中的moduleResolution选项控制,该选项可以是node或classic。如果省略此设置,则编译器将此设置视为node(如果模块是commonjs),否则将其视为classic 2。
IDE问题:有时,IDE可能不会立即获取更改,您可能需要在IDE 1中重新启动TypeScript服务器。
发布为ESM和CJS:当将包发布为ESM和CJS时,您可以使用esbuild等工具来生成.js和.mjs文件3。此外,确保package.json正确指向两个版本45。
嵌套导入:如果你使用的是嵌套导入,请确保在package.json的exports字段中正确指出它们。
我希望它有帮助:)