【问题标题】:Can not find jest in subpackage of yarn workspace在纱线工作区的子包中找不到笑话
【发布时间】:2019-11-14 10:50:43
【问题描述】:

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

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

测试运行器?试试npm i @types/jestnpm i @types/mocha

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

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

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

package.json

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

packages/compiler 中的package.json

{
  "name": "@pannenkoekjs/compiler",
  "dependencies": {
    "typescript": "^3.6.2"
  },
  "devDependencies": {
    "@types/jest": "^24.0.23",
    "jest": "^24.9.0",
    "ts-jest": "^24.1.0",
  }
}

还有packages/compiler中的jest.config.js

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

【问题讨论】:

    标签: typescript jestjs yarnpkg yarn-workspaces


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 但是如果我将包也用作 git 子模块怎么办?显式的 typeroot 定义似乎很脏。为什么纱线工作区不能检测到自己?
    • @softmashmallow 确实……明确的 typeroot 定义不是很好。它现在会做(对于我的用例),但请查看在项目根 package.json 中添加“nohoist”配置以排除特定包的提升。你可能会得到更好的工作。
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2019-04-08
    • 2021-12-18
    • 2020-09-30
    相关资源
    最近更新 更多