在Monorepo中添加Angular时,Typescript构建失败(Jasmine和Jest类型冲突) 主旨
我有一个Monorepo,只有Typescript包。当我运行在Monorepo中添加Angular时,Typescript构建失败(Jasmine和Jest类型冲突) 主旨,angular,typescript,jasmine,jestjs,monorepo,Angular,Typescript,Jasmine,Jestjs,Monorepo,我有一个Monorepo,只有Typescript包。当我运行tsc--build时,所有包都将编译成Javascript。在我添加了一个包含Angular应用程序的包之前,这一切都很好 为了测试我的软件包,我使用了Jest。但是我用茉莉花 问题 现在运行tsc--build时,Jasmine和Jest的类型似乎发生了冲突。 我总共得到184个错误。源于node_modules/@types/jest和node_modules/@types/jasmine以及我自己的软件包: 错误 我只显示了错
tsc--build
时,所有包都将编译成Javascript。在我添加了一个包含Angular应用程序的包之前,这一切都很好
为了测试我的软件包,我使用了Jest。但是我用茉莉花
问题
现在运行tsc--build
时,Jasmine和Jest的类型似乎发生了冲突。
我总共得到184个错误。源于node_modules/@types/jest
和node_modules/@types/jasmine
以及我自己的软件包:
错误
我只显示了错误日志中的几个片段,因为粘贴整个内容太长了。您可以在此处找到完整的错误日志:
开玩笑
node_modules/@types/jest/index.d.ts:1310:9-错误TS2717:后续属性声明必须具有相同的类型。属性“message”的类型必须为“string”,但此处的类型为“string |(()=>string)”
茉莉花
node_modules/@types/jasmine/ts3.1/index.d.ts:304:9
304 message?: string;
~~~~~~~
'message' was also declared here.
我自己的套餐
services/gateway/src/gateway.server.ts:7:24 - error TS2307: Cannot find module '@cents-ideas/utils'.
7 import { Logger } from '@cents-ideas/utils';
~~~~~~~~~~~~~~~~~~~~
解决方案
当我从Angular项目的列表中删除Jasmine类型时,一切编译都没有错误。这就是为什么我确信是他们造成了这些错误。但我需要这些软件包来进行角度测试
"devDependencies": {
// no errors when I remove those 2 packages
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
// ...
}
源代码
正如我已经提到的,我在Monorepo内部运营。如果您需要进一步了解,以下是源代码:
- (导致错误的原因)
- 不要在你的角度项目中使用茉莉花
- 使用-skipLibCheck tsc标志
- 使用类型根 不要在你的角度项目中使用茉莉花。 由于您似乎正在启动一个新的Angular项目,并且实际上还没有编写任何基于Jasmine的Angular测试,因此您也可以在该项目中使用Jest。如果Angular项目中已经有Jasmine测试,那么迁移也很容易 使用-skipLibCheck tsc标志 这将阻止对库类型文件进行类型检查。但是,有些错误现在可能未被检测到,并可能在运行时击中您() 使用类型根 使用,您可以专门提取和修复相应.d.ts声明中的冲突 您需要的是以某种方式“打破”两个声明之间的联系。因此,可以考虑创建一个新的文件夹:“重写”,并添加“重写\ jest\index .dts”作为你想做的事情。然后更新tsconfig.json以包含“typeroot”:[“\overrides”,“\node”_modules@types"]. 它告诉编译器首先在“\overrides\jest”中查找类型,如果没有找到,则在“\node”中查找类型_modules@types\开玩笑“`
- 不要在你的角度项目中使用茉莉花
- 使用-skipLibCheck tsc标志
- 使用类型根 不要在你的角度项目中使用茉莉花。 由于您似乎正在启动一个新的Angular项目,并且实际上还没有编写任何基于Jasmine的Angular测试,因此您也可以在该项目中使用Jest。如果Angular项目中已经有Jasmine测试,那么迁移也很容易 使用-skipLibCheck tsc标志 这将阻止对库类型文件进行类型检查。但是,有些错误现在可能未被检测到,并可能在运行时击中您() 使用类型根 使用,您可以专门提取和修复相应.d.ts声明中的冲突 您需要的是以某种方式“打破”两个声明之间的联系。因此,可以考虑创建一个新的文件夹:“重写”,并添加“重写\ jest\index .dts”作为你想做的事情。然后更新tsconfig.json以包含“typeroot”:[“\overrides”,“\node”_modules@types"]. 它告诉编译器首先在“\overrides\jest”中查找类型,如果没有找到,则在“\node”中查找类型_modules@types\开玩笑“`
- 我也遇到了这个问题,我可以想出三种可能的方法:
但是,您现在必须维护基本上是类型定义文件的本地分支。如果可以的话,您应该将该修复上传到您认为应该修复的库中。我也遇到了这个问题,我可以想出三种可能的方法:
但是,您现在必须维护基本上是类型定义文件的本地分支。如果可以的话,您应该将该修复上传到您认为应该修复的库中。我可能会使用Jest进行测试。但现在我无法在MonoReport中工作,我可能会使用Jest进行测试。但目前,我无法在monorepo中实现这一点
"devDependencies": {
// no errors when I remove those 2 packages
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
// ...
}