问题描述
在各种工具中,有一个名为“vendoring”的概念,比如 Ruby 的 bundle,以及 Chef 的 Berkshelf。然而,“vendor” 并不是一个动词,在文档中通常假设我知道它的含义。有人能帮忙解释一下这是什么,以及采用这种方法的好处吗?
解决方案
请注意以下操作可能因工具版本或环境差异而略有不同,请谨慎操作。
什么是 Vendoring?
Vendoring 是一个将特定版本的依赖项下载/安装并在其他地方(通常是支持应用程序的本地存储库/文件夹内)提供的概念。它的目的在于确保在依赖项不再可用时不会发生破坏。
Vendoring 的优势
Vendoring 的主要优势在于确保依赖关系不会在变动时导致应用程序出现故障。以下是 Vendoring 的一些优势:
防止依赖关系中断: 当依赖项不再可用时,Vendoring 可以防止应用程序出现破坏。例如,让我们考虑一个 Chef Cookbook 依赖于第三方 Cookbook(比如 mysql2 chef gem)。如果你没有锁定版本或进行 Vendoring,而依赖项进行了升级,破坏了先前的 API,且先前的版本已被删除,那么你的 Cookbook 也会出现问题,而且如果你需要紧急部署,你的 Chef 运行将失败。通过 Vendoring,你可以在本地的 Chef 服务器上保留依赖项,即使依赖项已经升级,你仍然可以继续引用先前的版本,你的 Cookbook 将不会出现问题。
防止上游存储库消失: Vendoring 还可以保护你免受上游存储库完全消失的影响。如果上游存储库彻底消失,你仍然可以通过本地存储库访问所需的依赖项。
减少外部依赖: Vendoring 还可以减少对外部存储库的依赖,从而减少应用程序在外部依赖项发生变化时受到影响的可能性。
保持稳定性: 通过 Vendoring,你可以确保在进行应用程序部署时使用的是一致的依赖项版本,从而提高稳定性。
需要注意的是,尽管 Vendoring 带来了这些优势,但你仍然需要定期更新依赖项和 Cookbook,以避免遇到一些不良的错误或问题。
如何进行 Vendoring?
在不同的工具中,实施 Vendoring 可能会略有不同。一般来说,你需要下载所需的依赖项,并将其存储在本地存储库中,以便将来在需要时使用。以下是一个通用的 Vendoring 步骤示例:
下载依赖项: 使用工具的命令来下载所需的依赖项,通常会将它们存储在一个特定的文件夹中。
更新配置: 根据工具的要求,可能需要更新配置文件以指向本地存储的依赖项。
使用本地依赖项: 现在,你的应用程序将使用本地存储库中的依赖项,而不是从外部源获取它们。
需要根据工具和具体情况来调整这些步骤。
结论
Vendoring 是一种在应用程序开发中很有用的实践,它可以确保你的应用程序在依赖项发生变化时仍然稳定运行。通过将依赖项下载并存储在本地存储库中,你可以减少外部依赖的影响,保护应用程序免受上游存储库消失的影响,并提高整体稳定性。记得定期更新依赖项,以保持应用程序的健康运行。