什么是"售卖"?

Nie*_*Bom 32 language-agnostic vendor

究竟是什么东西?(你会如何定义它?)

在不同的编程语言中它是否意味着相同的事情?从概念上讲,没有看到确切的实施.

17x*_*nde 25

基于这个答案

这里定义为Go as:

供应是制作您自己的项目正在使用的第三方软件包副本的行为.传统上,这些副本放在每个项目中,然后保存在项目存储库中.

这个答案的背景是Go语言,但这个概念仍然适用.

  • 值得补充的是,vendoring与使用依赖管理器的概念相反 (9认同)
  • 供应商的原因之一是避免版本冲突([详细解释](https://medium.com/plain-and-simple/dependency-vendoring-dd765be75655)) (2认同)

Nie*_*Bom 13

如果您的应用依赖某些第三方代码可用,您可以声明一个依赖项,让您的构建系统为您安装依赖项.

但是,如果第三方代码的来源不是很稳定,您可以"提供"该代码.您可以使用第三方代码,并以或多或少的方式将其添加到您的应用程序中.如果您认真对待此隔离,则应在内部将此代码"释放"到您的组织/工作环境中.

出售的另一个原因是,如果你想使用某些第三方代码,但你想稍微改变它(换句话说就是一个分叉).您可以复制代码,更改代码,在内部发布代码,然后让构建系统安装这段代码.

  • 我想补充一下我对这个术语的词源的理解:在这种情况下,"供应商"是软件的创建者(大概是你,因为我们正在使用Stack Overflow); 并且您正在发送"供应商"选择的依赖项版本(而不是用户选择的,或者更可能是用户选择的系统版本).据我所知,该术语已经过了很长一段时间. (4认同)
  • 我现在已经阅读了几次,仍然不确定我理解*vendoring*可能是什么.当然,它必须不仅仅是建立对其他人代码的分支的依赖,或者不会有*it*的奇怪新词,无论*它*可能是什么.但是请不要在我的帐户上重写你的定义,我已经知道了足够多的话,并怀疑我不需要了解*vendoring*的含义,如果有的话. (2认同)
  • 我认为“建立对其他人代码的分支的依赖”与我所说的非常接近,所以谢谢你。然而我感觉它的意义远不止于此,它也是为了特定用途而“构建/发布你自己的别人代码版本”。 (2认同)

Bor*_*ard 7

Vendoring 意味着将依赖项放入您的项目文件夹(而不是全局依赖它)并将其提交到 repo。

例如,运行cp /usr/local/bin/node ~/yourproject/vendor/node并将其提交到 repo 将“供应”Node.js 二进制文件——项目中的所有开发人员都将使用这个确切的版本。这通常不是为node它自己做的,但例如 Yarn 2(“浆果”)是这样使用的(并且只有像这样;他们甚至不全局安装二进制文件)。

承诺行为很重要。例如,node_modules已经安装在您的项目中,但只有提交它们才会使它们“供应商”。几乎没有人这样做,node_modules但例如,Yarn 2 的PnP +零安装实际上是围绕供应商构建的——您将.yarn/cache许多 ZIP 文件提交到存储库中。

“供应商”本质上会在存储库大小(更长的克隆时间、更多的数据传输、本地存储要求等)和安装的可靠性/可重复性之间进行权衡。