带有纱线工作空间的通用依赖库版本

Posted

技术标签:

【中文标题】带有纱线工作空间的通用依赖库版本【英文标题】:Common dependency lib version with yarn workspaces 【发布时间】:2021-01-28 06:38:21 【问题描述】:

假设我有一个在不同工作区之间共享的外部 NPM lib 依赖项,是否可以为所有相关工作区设置一个版本?如果这个依赖是对等或依赖怎么办?

例如

// external-lib-dep in npm

//package1's package.json
...
"dependencies": 
   "external-lib-dep": "^1.0.0"

...

// package2's package.json
...
"dependencies": 
   "external-lib-dep": "^1.2.0"

...

// package3's package.json
...
"dependencies": 
   "very-different-external-lib-dep": "^1.2.0"

...

是否有可能以某种方式“共享”deps 的版本,而不是一遍又一遍地复制它? (就像 maven 中父 pom 中的 dependencyManagement 一样)。

如果 monorepo 拥有某个公司所有服务的“通用”库会怎样。当我在我的服务中使用其中一个库时,它们的解决方案会起作用吗?

【问题讨论】:

【参考方案1】:

可以以一种特定的方式在工作区之间共享依赖的版本。

您的工作区应在其peerDependencies 中声明external-lib-dep。在你的monorepo根package.json中,你应该在dependencies中声明external-lib-dep。这样,您的工作区将从根工作区“继承”external-lib-dep 版本。

【讨论】:

太棒了!谢谢!我应该在 peer dep 部分设置什么版本? 如果你想选择root package.json提供的任何版本,你可以在peer dep部分设置*作为一个版本 如果 monorepo 拥有公司的所有标准后端库怎么办?我认为如果我将其中一个库设置为服务中的 dep,我将获得 * 对等依赖要求 抱歉,我只能根据您问题中最初提供的信息来回答。在您的问题中可以在哪里找到有关标准后端库的信息?

以上是关于带有纱线工作空间的通用依赖库版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有纱线工作空间的 monorepo 中从 nodejs 项目构建 docker 映像

纱线工作区没有建立本地依赖

Github 操作似乎无法在带有纱线工作区和 lerna 的 monorepo 中找到私有包

解决纱线工作区中的 TypeScript 依赖项

yarn 工作空间如何处理不同版本的外部依赖?

如何保持纱线工作区依赖关系同步