cbd*_*per 9 dependency-management package.json yarnpkg yarn-workspaces
使用 Yarn 工作区时,我可以将每个工作区安装devDependency在根工作区中吗?或者我应该将它们放在每个单独的工作区中?
例如:
packages
package1
package.json
package2
package.json
package3
package.json
package.json
Run Code Online (Sandbox Code Playgroud)
这是devDependencies每个包所需的。
package1 => external-package-A
package2 => external-package-A
package3 => external-package-A + external-package-B
Run Code Online (Sandbox Code Playgroud)
external-package-A和应该安装在哪里external-package-B?
external-package-A由于我的所有软件包都使用它,是否应该安装在根工作区中?
external-package-B如果我也安装在我的根工作区中会有什么问题吗?
或者我应该将它们安装在每个包中?我的意思是它们将列在package.json每个包的每个相应文件中,而不是列在根文件中。
这是我在 Reddit 上找到的内容。
https://www.reddit.com/r/javascript/comments/9t6yht/yarn_workspaces_why_is_adding_something_to_the/
评论 1
不算太差。它必须是明确的。
例如,您有软件包 A。它依赖于外部依赖项 B。如果您将 B 安装到 root 中,您将使软件包 A 在工作区中工作,但安装时它将失败。所有开发依赖项(不单独从工作区调用)都可以毫无问题地安装到根目录。
例如,我们在每个工作空间中都有 babel(不同包中的不同版本),但在 root 中却有 eslint。我们正在努力实现统一的构建过程,因此 babel 也将迁移到根 deps。
评论2
免责声明:我正在 Uber 致力于实施全公司范围内的 monorepo。
有两个原因。
如果您单独发布每个包,这是“糟糕的”。如果这样做,那么当您在其他地方安装它时,其 package.json 中将缺少所需的依赖项。
如果您处于大型公司范围的单一存储库(或任何足够大的单一存储库中,有多个单独的团队处理不同的软件包),那么升级每个人都依赖的顶级 dep 可能会非常困难,因为它可能需要来自数十人的代码审查,差异可能会以测试可能无法捕获的方式破坏人们的包(并且这还不包括不再有活跃维护者的包之类的东西)。
将 deps 放在顶层是一种称为锁定依赖项的策略,它确实有一些理论上的好处(例如,每个直接 dep 只有一个版本,因此安装、CI 等更快),但在实践中,维护成本非常昂贵,与未锁定的依赖策略(顶层没有依赖项)相比。
| 归档时间: |
|
| 查看次数: |
4846 次 |
| 最近记录: |