我正在尝试将Typescript项目重构为具有多个包(带有毛线工作区)的monorepo。在其中一个软件包(packages/compiler
中,我安装了jest,并进行了一些测试。他们之前工作,但重构后,我收到以下错误消息:
找不到名称“ it”。您是否需要为
安装类型定义?测试跑步者?尝试
npm i @types/jest
或npm i @types/mocha
我似乎无法弄清楚如何开玩笑。
我开玩笑地说,所有测试都“本地”安装在软件包中。但是,如果在node_modules/
之后检查yarn install
,则只能在.bin
中看到一个packages/compiler/node_modules
目录,并且可以看到(ts-)jest已安装在“根”目录中node_modules
。我认为我需要确保将jest安装在我的软件包(packages/compiler/node_modules
)的node_modules中,而不是安装在根目录中。但我似乎无法解决该问题(root package.json中的nohoist
选项无效)。
所以我的问题是如何在子包中开玩笑?
根package.json
:
{
"name": "pannenkoekjs",
"private": true,
"workspaces": [
"packages/*"
],
"devDependencies": {
"lerna": "^3.18.4"
}
}
package.json
中的packages/compiler
:
{
"name": "@pannenkoekjs/compiler",
"dependencies": {
"typescript": "^3.6.2"
},
"devDependencies": {
"@types/jest": "^24.0.23",
"jest": "^24.9.0",
"ts-jest": "^24.1.0",
}
}
还有jest.config.js
中的packages/compiler
:
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
};
答案 0 :(得分:0)
显然,错误不是关于找不到玩笑,而是关于类型定义。我已经安装了@types/jest
,但是它安装在de“ root” node_modules中。在tsconfig.json
的{{1}}中,我有以下内容:
packages/compiler
换句话说;它在该包的本地node_modules中搜索类型定义(因此"typeRoots": [
"./node_modules/@types",
"./src/@types",
]
),而jest的类型定义安装在根目录中。因此,将其添加到typeRoots可以解决我的问题:
packages/compiler/node_modules