在纱线工作区的子包中找不到笑话

时间:2019-11-14 10:50:43

标签: typescript jestjs yarnpkg yarn-workspaces

我正在尝试将Typescript项目重构为具有多个包(带有毛线工作区)的monorepo。在其中一个软件包(packages/compiler中,我安装了jest,并进行了一些测试。他们之前工作,但重构后,我收到以下错误消息:

  

找不到名称“ it”。您是否需要为

安装类型定义?      

测试跑步者?尝试npm i @types/jestnpm 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",
};

1 个答案:

答案 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