Yarn工作区、React、Monorepo存在冲突库版本的问题

23

我正在尝试使用yarn workspace monorepo。它由一个使用create-react-app创建的TestProject和一个使用create-react-library创建的SharedLib1组成。TestProject从SharedLib1导入代码。问题是,TestProject使用依赖于babel-jest ^24.9.0的react-scripts 3.3.0,而SharedLib1使用依赖于babel-jest 22.4.4的react-scripts-ts ^2.16.0。在TestProject中运行yarn start时,它会抱怨:

The react-scripts package provided by Create React App requires a dependency:

  "babel-jest": "^24.9.0"

Don't try to install it manually: your package manager does it automatically.
However, a different version of babel-jest was detected higher up in the tree:

  /monoRepo/node_modules/babel-jest (version: 22.4.4) 

我可以通过在TestProject中设置SKIP_PREFLIGHT_CHECK=true或手动升级SharedLib1中的react-scripts来禁用错误,但我想知道是否有更好的处理方法。

myMonorepo
 -web
   -SharedLib1
     -package.json
   -TestProject
     -package.json
 -package.json

我的MonoRepo的Package.json:

{
  "name": "my-mono-repo",
  "version": "0.1.0",
  "private": true,
  "workspaces": [
    "web/*"
  ],
  "nohoist": [
    "**/babel-jest",
    "**/babel-jest/**"
  ]
}

我的MonoRepo的Package.json:

{
  "name": "test-proj",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    ...
    "shared-lib-1": "^1.0.0"
  }
}

以下是测试代码App.tsx:

import React from 'react';
import TestComp from 'shared-lib-1';

import './App.css';

const App: React.FC = () => {
  return (
    <div className="App">
      <TestComp text={'aaa'}/>
      Learn React
    </div>
  );
}

export default App;

TestProj的node_modules中有babel-jest 24.9.0,而myMonoRepo的node_modules中有另一个版本22.4.4。


你能分享一下在你的多个 node_modules 文件夹中,你在哪些位置找到了 babel-jest吗?此外,你能分享一下 yarn why babel-jest 的输出结果吗? - Slbox
你能把一个最小化项目的样本发布到公共仓库吗? - Hossein Moradi
1个回答

1

这个问题与在create-react-app的GH存储库上打开的问题非常相似,甚至可以说是同一个问题,你可以在那里找到更多信息。

话虽如此,您可以尝试将babel-jest移动到devDependency而不是软件包依赖项。如果这样不起作用,您可以尝试选择性依赖关系分辨率,其中您可以强制将项目定向到特定版本的babel-jest -

"resolutions": {
   "babel-jest": "^24.9.0",
   "shared-lib-1": "^1.0.0"
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接