为啥以及啥时候 yarn 决定不在工作空间中提升包裹?

Posted

技术标签:

【中文标题】为啥以及啥时候 yarn 决定不在工作空间中提升包裹?【英文标题】:Why and when does yarn decide not to hoist a package in a workspace?为什么以及什么时候 yarn 决定不在工作空间中提升包裹? 【发布时间】:2021-09-30 02:01:54 【问题描述】:

我正在使用yarn workspaces 处理一个大型项目。我知道 yarn 工作空间本质上做了两件事

它自动化了我们多年前想要共享私有包时必须手动执行的符号链接过程 为了提高效率,它将所有类似的包提升到node_modules 的顶部。

但是,我注意到我的包仍然包含它们自己的代码 node_modules,我不知道为什么。当我制作一个示例 monorepo 应用程序并说我将lodash 安装在一个应用程序中时,它会直接进入根目录node_modules

yarn 为什么以及何时决定在包的node_modules 中安装包?

【问题讨论】:

【参考方案1】:

我在 yarn 的 Discords 上找到了答案。 yarn 将始终提升,除非它与另一个版本冲突。

【讨论】:

只是想补充一点,有时由于对等依赖关系,它可能会“冲突”——这样就可以在多个级别上存在完全相同的库版本的副本。一个示例冲突是described here;我拥有的真实案例是here。

以上是关于为啥以及啥时候 yarn 决定不在工作空间中提升包裹?的主要内容,如果未能解决你的问题,请参考以下文章

Yarn Workspaces 是仅存在于一个工作空间中的提升模块

在 npm/yarn 工作空间中,包应该使用 src 还是 dist

将 Lerna 与 Yarn 工作区一起使用有啥优势吗?

我啥时候应该在常规线程上使用 asyncio,为啥?它是不是提供性能提升?

我想了解为啥要创建一种类型来处理 Go 中的错误以及您如何决定它应该具有啥基础类型

你啥时候以及为啥要封课?