究竟什么是“供应商”?你如何定义这个术语?
它在不同的编程语言中是否意味着相同的事情?从概念上讲,不看确切的实现。
如果您的应用程序依赖于某些可用的第三方代码,您可以声明一个依赖项并让您的构建系统为您安装依赖项。
但是,如果第三方代码的来源不是很稳定,您可以“供应商”该代码。您获取第三方代码并以或多或少孤立的方式将其添加到您的应用程序中。如果您认真对待这种隔离,您应该在内部“发布”此代码到您的组织/工作环境。
供应商的另一个原因是,如果您想使用某些第三方代码,但又想对其进行一些更改(换句话说,就是一个分叉)。您可以复制代码、更改它、在内部发布它,然后让您的构建系统安装这段代码。
供应商意味着将依赖项放入您的项目文件夹(而不是全局依赖它)并将其提交到 repo。
例如,运行cp /usr/local/bin/node ~/yourproject/vendor/node
并将其提交到 repo 将“供应商”Node.js 二进制文件——项目中的所有开发人员都将使用这个确切的版本。这通常不会为node
自己完成,但例如 Yarn 2(“Berry”)就是这样使用的(并且只是这样;他们甚至不全局安装二进制文件)。
提交行为很重要。例如,node_modules
已经安装在您的项目中,但仅提交它们会使它们“供应商”。几乎没有人这样做,node_modules
但例如,Yarn 2 的 PnP +零安装实际上是围绕 vendoring 构建的——您将.yarn/cache
许多 ZIP 文件提交到 repo 中。
“供应商”本质上会在 repo 大小(更长的克隆时间、更多的数据传输、本地存储要求等)和安装的可靠性/可重复性之间进行权衡。
总结其他(太?)长答案:
供应商是对经常分叉的依赖版本进行硬编码。
这通常涉及静态链接或其他一些副本,但并非必须如此。
不管对错,“硬编码”这个词的名声既旧又坏。因此,您不会在公开出售的项目附近找到它,但是我想不出更准确的术语。