Language agnostic “什么是”呢;自动售货机;?

Language agnostic “什么是”呢;自动售货机;?,language-agnostic,terminology,vendor,Language Agnostic,Terminology,Vendor,“自动售货机”到底是什么?你如何定义这个术语 它在不同的编程语言中是否意味着相同的事情?从概念上讲,不看具体的实现。如果你的应用依赖于某些第三方代码可用,你可以声明一个依赖项,让你的构建系统为你安装依赖项 但是,如果第三方代码的源不是很稳定,您可以“供应商”该代码。您获取第三方代码,并以某种程度上隔离的方式将其添加到应用程序中。如果您认真对待这种隔离,您应该在组织/工作环境内部“发布”此代码 销售的另一个原因是,如果您想使用某些第三方代码,但又想对其稍加更改(换句话说,是fork)。您可以复制代

“自动售货机”到底是什么?你如何定义这个术语


它在不同的编程语言中是否意味着相同的事情?从概念上讲,不看具体的实现。

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

但是,如果第三方代码的源不是很稳定,您可以“供应商”该代码。您获取第三方代码,并以某种程度上隔离的方式将其添加到应用程序中。如果您认真对待这种隔离,您应该在组织/工作环境内部“发布”此代码

销售的另一个原因是,如果您想使用某些第三方代码,但又想对其稍加更改(换句话说,是fork)。您可以复制代码、更改代码、在内部发布代码,然后让生成系统安装这段代码。

基于

Go的定义为:

销售是指制作自己的第三方软件包副本的行为 您的项目正在使用。这些副本通常放在里面 然后保存在项目存储库中

这个答案的上下文是围棋语言,但这个概念仍然适用。

总结其他(太?)长的答案:

Vendoring是硬编码通常是分叉版本的依赖项

这通常涉及静态链接或其他副本,但不必如此


不管是对是错,“硬编码”一词有着古老而坏的名声。因此,你不会发现它接近于项目公开出售,但我想不出一个更准确的术语。

出售意味着将依赖项放入项目文件夹中(与全球依赖它相比),并将其提交回购

例如,运行
cp/usr/local/bin/node~/yourproject/vendor/node
&将其提交到repo将“vendor”node.js二进制文件–项目中的所有开发人员都将使用此确切版本。这通常不适用于
节点
本身,但例如,纱线2(“Berry”)就是这样使用的(而且仅此而已;它们甚至不全局安装二进制文件)

提交行为很重要。例如,
node\u模块
已经安装在您的项目中,但只有提交它们才能使它们成为“供应商”。几乎没有人会为
节点单元模块
这样做,但例如,纱线2的PnP+实际上是围绕着供应商而构建的–您可以在repo中提交
纱线/缓存
,其中包含许多ZIP文件


“出售”本质上是在回购规模(更长的克隆时间、更多的数据传输、本地存储要求等)和安装的可靠性/可复制性之间进行权衡。

我发现它被用于Python、PHP和Ruby世界。但这不是一个非常有名的概念。这就是我为什么要问这个问题的原因:-)事实上,我还没有看到它被如此广泛地使用,这也有助于我对这个概念的不完全理解。我已经读了好几遍了,但仍然不确定我是否理解什么是自动售货。当然,这肯定不仅仅是建立对其他人代码分支的依赖,否则就不会有一个奇怪的新词来形容它,不管它是什么。但是,请不要为我重写你的定义,我已经知道了足够多的单词,并且怀疑我不需要了解vendoring的意思,如果有的话。我认为“建立对其他人代码分支的依赖”与我所说的非常接近,所以谢谢你。然而,我觉得这不仅仅是一个问题,它也是“为特定用途构建/发布他人代码的您自己的版本”。我想补充一下我对这个术语词源的理解:本例中的“供应商”是软件的创建者(可能是您,因为我们处于堆栈溢出状态);而且,您正在发送一个“供应商”选择的依赖项版本(与用户选择的版本相反,或者更可能是用户选择的系统版本)。据我所知,这个术语已经存在很长时间了。值得一提的是,供应商服务与使用依赖关系管理器在概念上是对立的。此外,还值得一提的是,供应商的软件包在定义上不是免费的。一个很好的例子是Fullcalendar(一款优秀的软件,价格不太贵)