yanni4night

NPM:天下没有免费的午餐

yanni4night · 2016-08-13翻译 · 1020阅读 原文链接

不久之前我正在开车下班的路上,看见了一样让我屏住呼吸的东西。我立即踩下刹车慢慢停了下来,很快我就看见了一个箱子。

一箱子狐狸。

“找一个好人家吧。”

十个月之后的现在我告诉你哪些狐狸根本不是白来的。我得承认,聪明的人应该知道一居室放七个狐狸实在太多了。但我很孤独,也很喜欢狐狸,就是这样。

你要相信,同一天我就搭建了一个网站。没什么亮点,就是一个个人站,几个页面,一些动画,一个小图册,外加所有质数的列表

你还记得 2015 年 8 月份的世界是什么样的么?Node 4 还没有发布,Babel 还是 5,React 也还停留在 0 点几的版本。

回到几周前,我坐下来准备把我的网站升级到 Node 6。我想应该没什么问题,就是一个版本升级和可能几个依赖的更新。细节就不提了,但是面对陈旧的依赖一些软件包不工作了,对于依赖的新版本,也有一些软件包不工作了,一共有 56 个软件需要更新版本号,而且不是都更新到最新的那一个版本。

讽刺的是,最让我头疼的软件包反而是我不真正需要的。这让我开始思考 npm 包的“总体拥有成本”。

下面是我认为的在建立下一个 npm 商店时,软件包应该引起重视的,至少要经过基本讨论的隐形价值。

时间

毫无疑问,大量的软件包会节省你的时间。但你需要尝试去量化。

刚才我在寻找一个能处理日志的软件包。我花了几小时去找,几个小时阅读文档,几小时去搜索 bug 的解决方案。然后我把它丢掉,又花了几小时自己写了一个。这才是我的项目需要的小型日志记录器。

因为我的网站需要部分升级,我花了三个小时阅读三个升级指南更新一个具有十个月大的 react-router。往事回首,我真应该自己写 50 几行代码去实现区区数个路由,它能够运行一辈子。

观点:当你打算选择一个软件包开发时,想想如果自己实现需要多久。如果它没有给你节约很多时间,三思而后行。

狐狸趣闻:狐狸有 42 颗牙齿。七只狐狸有 294 颗。

学习

如果你不想成为最好的 JavaScript 开发者,你可以略过这一部分。

因为你不懂如何使用特定的技术,所以我现在要评论你使用的 npm 软件包。现在假如你需要点击并拖拽的功能,有正确和错误两种方式。但已经有现成的了!它解决了浏览器和设备的兼容性问题,似乎不错。

无论如何自己去实现。因为你能知道如何实现它 —— 这是价值所在。

第二个例子:你想第一次使用 Web Audio API。如果你搜索的是 “web audio npm” 而不是 “web audio mdn”,我觉得你没有上道。

观点:精通是好的。如果你选择了一个你不知道如何工作的软件包,那么这就是你应该开始学习的时候了。

狐狸趣闻:判断狐狸是否怀孕很难,但如果你有 12 只狐狸的话就非常容易了。

风险

如果你使用了别人的 npm 软件包却不看它在 github 上没有关闭的 issue,你一定是疯了。难道你想陷入困惑的境地吗?

写 npm 软件包的都是像你一样的人类。然而一些人可能并不如你。发布一个 npm 软件并不需要任何审核。之前我在 stackoverflow 上看到一个问题,一些可怜的初学者想要解决一个 webpack 的故障。什么问题?他使用的是 JSX (React 的语法,不是合法的 JavaScript)编写的软件。一些蠢货会直接向 npm 发布 React 组件,没人能用得了。可怜的初学者从来没见过这样的(尽管你使用了一个 github 上有六颗星的软件,你还是在自找麻烦)问题。

观点:软件包可能有 bug,很容易就不工作了,它们的作者也可以发布一个不遵循语义化的版本,而且这些你都无法预期。因此对于任何软件包,你都是在承担着能够破坏你代码的微小的、未知的风险。人类对于低概率风险的评估能力很差,但要试试。

狐狸趣闻:赤狐连续地发出叫声,每一声持续 3 到 10 秒。另外,当你睡觉的时候,狐狸的叫声会让你做噩梦。

学习曲线

最近我写一篇关于在 React 中使用图标的博客。最终的产出是一个组件,输入图标的名字,输出 svg 格式的图标。非常简单的东西。在评论中有人问我为什么不使用一个特定图标工具库。我看了看那个工具:它使用了高阶组件和 React 的上下文来对图标上色。如何你要使用它,就需要看它的 readme 才能知道如何对图标上色。如果你自己实现这个功能,你会非常清楚它是如何工作的,也并没有任何需要文档的黑盒代码。这不是什么大事,但是一旦需要做 50 遍,你该感到痛苦了。

有人在 reddit 指出,上面的观点仅针对简单的东西。不要重新实现 Angular 和 React 并声称你版本的更好,因为你没有文档。

观点:如果软件不阅读帮助文档就没法使用,那么它就提高了你的代码的学习曲线。

狐狸趣闻:狐狸的癫痫是遗传的。

那么...我的建议?

在你下次敲出 npm install... 的时候,停下来从你的项目生命周期的角度想想这个软件包的价值。对于你和你后面的开发者都是。花几分钟对比一下它能给你带来多大的收益,也许,仅仅也许,它只是一个你不需要的免费券。

相关文章