提问者:小点点

什么是“仇杀”?


“仇杀”到底是什么?你会如何定义这个术语?

它在不同的编程语言中的含义是否相同?从概念上讲,不看确切的实现。


共3个答案

匿名用户

基于这个答案

这里为Go定义为:

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

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

匿名用户

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

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

仇杀的另一个原因是,如果你想使用某些第三方代码,但你想对其进行一点更改(换句话说是一个分叉)。你可以复制代码,更改它,在内部发布它,然后让你的构建系统安装这段代码。

匿名用户

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

例如,运行cp /usr/local/bin/node~/yourproject/供应商/node

提交行为很重要。例如,node_modules已经安装在您的项目中,但只有提交它们才能使它们成为“卖主”。几乎没有人对node_modules这样做,但例如,Yarn 2的PnP零安装实际上是围绕仇恨构建的——您将带有许多ZIP文件的. yarn/cache提交到repo中。

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