全文2949字,预计学习时间9分钟。
照片由乔纳·皮特里奇拍摄,来源Unsplas几个月前,我为一家技术公司做了一个关于Web组件的演讲。当时,大多数参与者从未使用过Web组件。这份报告非常有趣和受欢迎。最后观众问了一系列问题,持续了半个多小时。

快结束的时候,有人问我:你展示了原来的DOM操作代码。这是否意味着我们将回到使用“jQuery那样的面条代码”的时代?看到现场有人点头表示同意,让我有所思考。
显然,那些不属于某个框架或库,而只是我们所说的“香草Javascript”的代码,会被认为是不好的“面条代码”。
这并不奇怪。
整整一代开发人员都是从框架和初学者工具包开始的,它们带有许多现成的依赖项。只需运行npm install并根据需要调整代码模板。
虽然这可能是一个很好的起点,但我们确实需要认识到编程不仅仅是将第三方库粘在一起。
不反对依赖
首先澄清一下,我并不反对使用依赖关系。其实我有很多使用多个前端框架的经验。
但是,我希望读者在考虑使用哪一个之前,可以问问自己是否真的需要这些依赖来完成下一个项目。
这是一个非常重要的问题。我觉得思考这个问题的人还不够多。
“不要重新发明轮子”的谬论
读者可能听过很多次,作为一个开发者,你不应该“多此一举”。相反,您使用的库应该已经可供您做您想构建的事情了。
比如当你需要使用数据库ORM的时候,这句话就是一个很好的建议。因为现在已经有完整的ORM可用,所以从头开始写没有意义。
问题是:我们应该在决定编写自己的代码和决定何时使用第三方依赖之间划一条线?
2016年,由于法律因素,left-pad的开发商决定删除NPM的所有软件包。这种做法几乎让互联网瘫痪。这足以说明人们对第三方软件的依赖有多疯狂。
left-pad的唯一作用是用0或空单元格填充字符串的左边部分。这个包只有几行代码,初级开发者也可以用几行代码写出来。实际上,左键盘已经被放弃,并被标准的String.prototype.padStart所取代。然而,仍然有成千上万的项目依赖于左键盘。
现在变得更糟了。Isarray只包含四行代码,它的作用是检查给定的参数是否是数组。当然,这是针对不支持local Array.isArray方法的老款浏览器,但是任何开发者都可以用一行代码编写。
自己编写这些包的代码并不是“重新发明轮子”。绝对没有必要在项目中使用这些包作为依赖项。
我不知道我在用什么
尽管如此,一些人仍然认为最好使用现成的第三方模块——即使它们非常小——因为这些第三方模块已经过“实际测试”,是“经过验证的解决方案”。
问题是:你确定是这样吗?
你真的知道这种依赖是经过测试和验证的解决方案吗,或者只是假设它是?
您真的了解node_modules文件夹中的所有内容吗
我不知道。可能没人知道。坦白说,你不必知道。但是你至少应该考虑安装什么依赖项,自己写什么代码。
每个现代浏览器都已经包含fetch。你还需要一个巨大的库来进行简单的HTTP调用吗?你自己写几行代码就可以了,写出来的程序只会执行你真正需要的操作。还需要这么大的数据分析库吗?

好像整整一代开发者都太没有安全感了,不敢自己写自己的代码,不敢用自己的代码。而是把各种各样的库粘在一起,假设这些库都通过了测试,没有出现bug。
但这种安全感只是一种错觉。
图源:pexels为什么我们会变得如此缺乏安全感?
为什么这些开发人员如此害怕相信他们自己的代码,而宁愿使用其他人写的代码,他们认为这些代码更好、更安全?
毕竟这些在Github上发布开源代码的人也是开发者,和我们一样。他们也不是完美的,他们写的代码也可能有bug。然而,我们选择相信他们而不是我们自己。
我理解读者不想写RxJS这样的库或者自己反应。这些大型库已经存在了很多年,有很多贡献者,并且通过了考验。除非你想从中学习,否则我不建议你重新执行这些库。
但是对于较小的函数,可以很容易地编写并完全适应自己的需求,我建议读者自己编写代码。至少,这些功能在必要时可以很容易地修改和修复。
我猜开发者对自己写代码的不安全感来自于使用多年的库和框架,它们对我们隐藏了最初的Javascript平台。这种情况从jQuery的出现开始,随着Angular和React等框架的出现变得更加严重。
这些框架是抽象的概念,人们认为它们本质上是复杂的。由于这个原因,开发人员经常将这些作为黑盒。
同样,我不反对使用这个框架,因为我确实看到了它带来的价值。然而现在,似乎整整一代开发者只知道如何使用框架进行编程,而对底层平台几乎一无所知。他们不知道如何使用原始DOM,因为他们几乎从未接触过它。
我参与过几个常青树项目,第一个问题是我们应该用哪个框架,而不是要不要用。项目的默认假设是需要一个框架,而主要论点是框架可以提供我们需要的一切,我们不应该重新发明“轮子”。
具有讽刺意味的是,这些人中有很多人对本地平台没有扎实的知识,无法在一开始就判断所选择的框架是否是一个好的选择。
这些框架的复杂性令人望而生畏,这是可以理解的,尤其是对于初学者。他们倾向于使用这些框架作为黑盒,而不是理解它们的内部工作原理。
框架也不鼓励知道内部工作原理的行为,因为它们的工作是通过隐藏底层细节和API来简化编程。
这就导致了人们对框架的依赖,反过来也不能给开发者写自己代码的信心。
图源:pexels依赖是外包业务。
在一个应用中使用依赖关系的时候,你基本上是把这部分外包给其他开发者,所以你最好确保那个开发者做得很好。
如果你有一家公司,你把客户服务外包给其他公司,那么如果他们把服务搞砸了,你将面临大麻烦。如果他们对什么是好的客户服务有不同的看法呢?
您可能不会让这种情况发生,所以您应该以同样的方式对待应用程序中的依赖关系。这并不意味着您需要审查所有依赖项的源代码,但至少您应该真正理解它是如何工作的。
理解基本原则
但是要理解它是如何工作的,你应该首先了解香草Javascript编程,因为它是一切的基础。
前端框架肯定会带来价值,但也意味着繁杂的工作和昂贵的运营费用。我经历过学习和实现框架的痛苦,我可以告诉你,你需要确保这些努力是值得的。
有必要使用本地平台。今天看看它的功能,你会大吃一惊。

不要人云亦云,说不要多此一举。你应该先学习基础知识,然后决定你是否真的需要这个库或框架。
这样,你会成为一个更好的开发者。
留言关注
我们一起分享AI学习和开发的干货。
如转载,请后台留言,并遵守转载规范。


