既然你正在使用纱线工作区 https://yarnpkg.com/blog/2017/08/02/introducing-workspaces/它管理所有项目(工作空间)的依赖关系,您应该将每个项目的依赖关系添加到自己的项目中package.json
,而不是工作区根目录。纱线仅使用one yarn.lock
放置在工作区根目录中的文件。此外,它还尝试将所有项目的依赖关系移至node_modules
工作区根目录以尽可能防止重复。虽然需要放置一些依赖项node_modules
他们自己的项目;例如当工作空间根目录有一个devDependency
to [email protected] /cdn-cgi/l/email-protection
当一个项目依赖于另一个版本的同一个包时,比如说1.2.5
它们不兼容。假设您的工作区的目录结构如下:
├── workspace-root
| ├── package.json
| ├── workspace-a
| | ├── package.json
| ├── workspace-b
| | ├── package.json
运行后yarn
无论是在工作区根目录还是在任何工作区目录中,您都将具有以下目录结构:
├── workspace-root
| ├── node_modules
| ├── package.json
| ├── yarn.lock
| ├── workspace-a
| | ├── package.json
| | ├── node_modules
| ├── workspace-b
| | ├── package.json
| | ├── node_modules
仅当您想要从工作区根运行脚本并且它需要依赖项时,才将依赖项添加到工作区根。在这种情况下,项目独立于该依赖关系,因此您可以忽略该警告。
为什么纱线会发出警告?
如果将项目的公共依赖项添加到工作区根目录中,它将不会进来package.json
的项目。因此,如果您分离一个项目,它不会将所有依赖项都放在自己的项目中package.json
所以运行yarn install
对于分离的项目导致其自身不具有所有依赖项node_modules
。显然,分离的项目无法工作,您需要修复缺失的依赖关系问题来解决该问题。
有关纱线工作区的更多信息
Yarn Workspaces 是一项功能,旨在更轻松地管理彼此相关的项目的依赖关系。例如,当您的项目具有类似的依赖关系时,您可以将每个项目声明为工作区。它可以防止大量重复。另一个重要的用例是单一存储库:
那些尝试过将项目拆分为多个包的人都知道
一次跨多个包进行更改是多么困难。
为了使过程更容易,一些大型项目采用了 monorepo
方法或多包存储库,这减轻了负担
跨包编写代码。
管理 JavaScript 开发人员每天使用的几个项目
作为 monorepos:Babel、React、Jest、Vue、Angular。
使用 Yarn Workspaces 可以带来以下好处:
- 它允许您以这样的方式设置多个包,只需运行一次yarn install即可将所有包安装在一个包中。
单次通过。
您的依赖项可以链接在一起,这意味着您的工作区可以相互依赖,同时始终使用可用的最新代码。
这也是一个比yarn link
因为它只影响您的工作区树而不是整个系统。
所有项目依赖项都将安装在一起,为 Yarn 提供更多自由度来更好地优化它们。
Yarn 将使用单个锁定文件,而不是为每个项目使用不同的锁定文件,这意味着更少的冲突和更容易的审查。