我创建了quite a few npm packages,但我仍然不知道这个问题的正确答案:“JavaScript npm包应该缩小吗?”
我一直都明白缩小缩小代码是一个坏主意,所以在我的npm包中没有这样做。但是,我看到一些npm包axios,styled-components提供了其“dist”文件的缩小版本以及未明确版本,而Lodash则没有。{{3}}。
哪个是对的?谁会消费缩小版?
答案 0 :(得分:11)
这一切都取决于您的包消费者的环境
对于NodeJS受众,您的包不必缩小,因为节点运行时通常具有直接文件访问到node_modules
文件夹。不需要网络传输,并且在运行代码之前不会执行其他代码转换。
对于通过在其构建管道中使用捆绑器的开发环境进行消费,您的包最好不会缩小。在大多数情况下,包装消费者确实将其自己的缩小过程作为其构建的一部分。此外,以模块格式提供包时,例如:
上述声明依赖于这样的假设:如果包含多个源文件,则缩小之前是捆绑过程。缩小单独的模块是不常见的。如果您确实提供了单独的模块,例如对于浏览器中的RequireJS运行时,缩小仍然相关,因为这些文件主要通过网络获取。
如果您决定不提供缩小代码,仍然建议您运行自己的测试以查看标准缩小过程 - 例如使用UglifyJS - 不会破坏软件。
尽管许多消费者都没有必要缩小你的代码,但除了你的常规发行版之外,仍然建议提供一个缩小的包,以防万一有人可以从中受益。
对于像Angular,Vue,Ember等框架的插件/扩展,通常不需要缩小代码,因为它们都通过 cli 实现自己的构建管道。
这些是缩小主要针对的案例。如果您在CDN上托管文件,或者通过网络提供文件以便直接使用<script>
代码,那么您所看到的就是您所获得的内容。在这两种情况下,文件都必须通过网络。缩小可以节省字节数。
这两者之间要有一个非常重要的区别。虽然并不总是需要缩小,但 通常是您负责转换任何不太可能与您的包受众群体的目标环境100%兼容的代码。这包括:
ES20XX
语法映射到 - 可能 - ES5 ES20XX
API实施如果您的软件包包含单个软件包而不是一堆单独的模块,那么缩小是一个安全的选择。由于捆绑器永远不会尝试任何有趣的单个模块/实体(如树木摇晃),因此您的代码可能在技术上不会因任何构建过程而发生变化。
如果您要分发软件的缩小版本,最好还发布非缩小版本以进行调试。