创建额外的小型库的小指南

该帖子的灵感来自于安德烈·西特尼克(Andrey Sitnik)创建的纳米图书馆的想法(例如nanoid,nanoevents和nanodelay)
介绍
上次,我真的为NPM中的库大小感到疯狂。 你觉得还可以吗 让我摘下你的玫瑰色眼镜。
只需查看最流行的软件包的统计信息即可创建对象的深层克隆。 你可以在这里找到它。


它的大小在这里。 对于只有一个功能的软件包来说,这确实是一个巨大的选择。 这就是为什么我将nanoclone做到相同的原因(除了克隆圆形对象,我将在以后完成)。 看一下纳米克隆的大小:

它的体积缩小了51倍,而且没有任何问题。
我想分享我在创建额外的小型库方面的经验,并告诉您如何加入我们的nanohype😎
最小化,控制或不使用所有外部依赖项
如果要创建纳米库,则仅在以下两种情况下才应使用外部依赖项:
- 如果没有特定的软件包(例如,路径到正则表达式)或任何其他可以正常工作,经过良好测试且尺寸较小的软件包,您将无法应对 。
- 这是另一个不会大大增加库大小的纳米库。
如果您没有发现轻量级的类似物应该由您编写,则可以使用另一个助手,例如clone / deepmerge / etc(顺便说一下,我的朋友尼古拉也做了nanomerge,很喜欢)。
有人会说“ utils.js是邪恶的”,但这种主张不适用于纳米图书馆
没有建设者和翻译者
等等,什么? 是的,如果您想拥有一个很小的库,则不应使用webpack,汇总,babel和其他修改代码的工具。 因为您捆包尺寸的大部分将被特定的捆扎机功能,通货膨胀填料和其他垃圾填充。
仅当您具有外部依赖项并希望将您的库作为CDN中的包括在内时,才使用汇总。 但是,如果没有依赖性,则可以将所有代码存储在一个文件中,而无需使用更多汇总。
那么,如何丑化呢? Uglify对于额外的小型库不会给您带来很大的影响。 当我编写nanoclone时,仅使用uglify插件进行汇总甚至增加了文件大小。


使用ES6 +功能
答案是不。 为了保存最大的浏览器兼容性,并且不使用会增加库大小的编译器,您应该编写仅ES5的代码。
我知道ES6的功能很棒,但是IE不支持诸如散布运算符或异步/等待之类的语法糖。 使用转译器是如此昂贵。
它还适用于imports/exports用法。 使用require代替ES6模块。 它还将使人们使用不支持imports Node.js使用您的库(仅在v9.0 +中带有— experimental-modules标志,但有多少人使用它?Node v4 LTS仅在2018年8月到期) 。
使用特殊工具控制尺寸
我使用大小限制来控制我的库大小。 这是一个小型实用程序,可以检查所有依赖项和gzip的文件大小,并在超出设置的限制时引发错误。 它还具有— why标记以显示库零件的大小

有时我会在安装软件包之前使用bundlephobia检查软件包的大小。

如果您使用的是VSCode,我还建议您导入费用插件。 显示导入代码的大小

结论
因此,制作超小型库的规则:
- 没有外部依赖关系(非常重要的程序包或其他纳米库除外)
- 没有使用捆绑器和编译器(但是您可以使用汇总来将您的库作为
包括在内) - 没有使用ES6功能(
imports/exports也是ES6的一部分!)
希望这篇帖子对您有用并且有趣interesting
特别感谢Andrey Sitnik的想法和动力。
投稿后
我发起了一个挑战—写我自己的lodash ,其中没有一种方法的大小超过1KB。 如果你感兴趣:
- Github仓库:这里
- Twitter:这里