默认情况下供应商

2021-03-12 03:55:23

这不是推荐。这更像是我最近获得的习惯。如果这使其途中致骚扰新闻,人们觉得他怎能,我唯一的反应将是🤷,为什么不。

我一直在建立一件事,在JavaScript中,一种像我过去建造的那样的应用程序。具有同样的基本目标,使东西有用。我如何实现这个目标是灵活的。但它最终有很多使用无聊技术,试图不透露易于思考,试图正确地思考硬部件,等等。所以写回家并没有那么多,这会让你的通常的反应/ next.js / javascript工程师人感到惊讶。

但是我所思考的一件事是一种不寻常的是:我是多件事。

在编程意义上,在编程意义上的意思是“将另一个项目的源代码复制到您的项目中。”它与使用依赖项的做法相反,这将是将另一个项目的名称添加到您的Package.json文件中并具有NPM或YARN下载并将其联系起来。

回到2016年,我写了一篇关于乐观和悲观的版本控制的文章,提到了作为“最悲观”的方法,这粗略的。供应商意味着您不会从依赖项获取自动错误修正或新错误。这意味着您根本不必信任依赖作者。

商务的缺点 - 没有自动更新,一个更大的源树,更多的代码维护,看起来很奇怪,非常规 - 对于javascripters来说可能很清楚,大多数大多数语言家庭的成员。像C这样的语言默认情况下,人们会在他们的项目中复制只将图书馆复制到他们的项目中。转到一段时间,有点像那样 - 你会复制文件,无论是自动还是手动。但是现在GO模块(对我未经训练的眼睛)看起来很像其他语言的规范。

那么这样做是什么原因?这是我脑海的内容。

我读了很多其他人的代码。我强烈推荐它。我的金色规则之一是你不应该是你不需要的黑盒东西。我喜欢“使用依赖性以获得效率,而不是无知。”

当我是商务代码 - 将其复制到项目中并使其通过我的基本eslint&测试标准,我会尽力重写和重构新代码,让我深入了解他们如何工作以及它们的限制谎言。

显然,其他人的代码是他们的代码。我没有做100%的思想导致它 - 我可能正在做5%的时间。但是吸收那个位的脑海,而不是看到外部API表面,而不是看到股息。

有时候,当然 - 我会读取依赖,开始重构,并意识到自己写它更简单,或者我应该找到另一种选择。如果某些东西是依赖或我的代码,这没关系:当您运送产品时,这是您的所有责任。

vending使许多依赖性具有很多表面积 - API调用和方法非常明显 - 您不会使用。这勾结了关于微小模块的辩论(较少的表面积!较少的废物!更加困难!

死代码消除有助于!但它只能这样做,并且您的项目中仍然存在死亡代码。即使是最先进的DCE也不会削减你正在使用的类的方法。只有一些DCE系统可以处理CommonJs,并且大多数工作在单个变量的级别,而不是这些变量的部分。

要进一步逐步,您可以将测试套件修剪到您使用,运行覆盖范围和注释的API表面或删除死亡的部件。

旧项目可能不稳定。他们可能有虫子 - 他们通常会这样做。在每个问题跟踪器中,至少有一个多年的错误是如此邪恶,它可能永远不会消失。

但旧项目已稳定。他们不会经常改变,而当他们做的变化很小。因此,在两年前的快速发布周期中,您未能使用的价值不适用于。更糟糕的是 - 你有很多旧的模式,这个项目可能无法删除!您是否在项目中希望IE10解决方法?如果您正在使用大量的第三方依赖项,您可能是继承intrum array.Includes的内容的Polyfills。

在我的简要重写中,我可以为ISArray或代码拔出旧的旧式化填充,检查json.parse真的存在于此环境中。在2021年,它确实如此。

这是一个混合袋。我的助手副本可能会漂浮到原来的远离原件,并贡献完整的变化并不有用。我所做的很多变化将是一个有些化妆品或类似于为没有它的东西添加打字支持的东西。

但另一方面,从我的vendered副本移植到原始的修复程序将很快,并且在源树本身中具有依赖性是一个非常理想的方案,可以快速修复副代码中的错误。

GPL'D的依赖关系(没有许多,但许可证仍然徘徊)将在释放物品时发布,因为法律要求它 - 尽管这些变化不会特别令人兴奋。 MIT / BSD / ISC许可的事情主要将获得上游修复,以获得社区的利益。

我不做供应商或网上的反应或其他大型,令人难以置信的复杂依赖项。他们会很快改变,我真的可以为这些项目做出贡献。我很乐意将Lodash作为依赖于几个竞争对手的公用事业。但对于中小型依赖,供应商产生了很大的意义。