6

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

找不到名称“它”。您是否需要安装类型定义

试跑者?尝试npm i @types/jestnpm i @types/mocha

我似乎无法弄清楚如何让笑话发挥作用。

我已经在所有测试的包中“本地”安装了。但是如果我node_modules/在 a 之后检查yarn install,我只能看到 中的.bin目录packages/compiler/node_modules,并且可以看到 (ts-)jest 安装在 "root"node_modules中。我认为我需要确保 jest 安装在我的包(packages/compiler/node_modules)的 node_modules 中,而不是安装在根目录中。但我似乎无法弄清楚如何做到这一点(nohoist根 package.json 中的选项不起作用)。

所以我的问题是如何让我的子包中的 jest 工作?

package.json

{
  "name": "pannenkoekjs",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "devDependencies": {
    "lerna": "^3.18.4"
  }
}

package.jsonpackages/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.jspackages/compiler

module.exports = {
  preset: "ts-jest",
  testEnvironment: "node",
};
4

1 回答 1

7

显然,错误不在于找不到笑话,而在于类型定义。我已经@types/jest安装了,但它安装在 de“root”node_modules 中。在我tsconfig.jsonpackages/compiler里面我有以下内容:

"typeRoots": [
    "./node_modules/@types",
    "./src/@types",
]

换句话说; 它正在该包的本地 node_modules 中寻找类型定义(so packages/compiler/node_modules),而 jest 的类型定义安装在根目录中。因此,将其添加到 typeRoots 解决了我的问题:

"typeRoots": [
    "./node_modules/@types",
    "../../node_modules/@types",
    "./src/@types",
]
于 2019-11-14T11:17:09.460 回答