Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript npm包应该缩小吗?_Javascript_Node.js_Npm - Fatal编程技术网

JavaScript npm包应该缩小吗?

JavaScript npm包应该缩小吗?,javascript,node.js,npm,Javascript,Node.js,Npm,我已经创建了,但我仍然不知道这个问题的正确答案:“JavaScript npm包应该缩小吗?” 我一直明白缩小缩小代码是个坏主意,所以在我的npm包中没有这样做。然而,我看到一些npm软件包提供了其“dist”文件的缩小版本以及未统一的版本,而不是 哪一个是对的?谁会使用缩小版?这取决于您的软件包消费者的环境 NodeJS 对于NodeJS用户,您的包不必缩小,因为节点运行时通常可以直接访问node\u modules文件夹。不需要网络传输,并且在运行代码之前不执行额外的代码转换 捆绑机/建

我已经创建了,但我仍然不知道这个问题的正确答案:“JavaScript npm包应该缩小吗?”

我一直明白缩小缩小代码是个坏主意,所以在我的npm包中没有这样做。然而,我看到一些npm软件包提供了其“dist”文件的缩小版本以及未统一的版本,而不是


哪一个是对的?谁会使用缩小版?

这取决于您的软件包消费者的环境


NodeJS 对于NodeJS用户,您的包不必缩小,因为节点运行时通常可以直接访问
node\u modules
文件夹。不需要网络传输,并且在运行代码之前不执行额外的代码转换


捆绑机/建造管道 对于在构建管道中使用捆绑程序的开发环境,最好不要缩小包。在大多数情况下,包使用者在构建过程中实现了自己的缩小过程。此外,以模块格式提供软件包时,例如:

  • 可以更准确地分析实现代码基的依赖树,这可能会导致更好的树抖动性能
  • 对于所有这样的包(模块是“单例”),包之间的公共依赖关系实际上是相同的符号。这有助于代码拆分以及保持捆绑包较小
上述声明基于这样的假设,即如果包含多个源文件,则缩小之前会有一个绑定过程。缩小单独的模块是不常见的。如果您确实提供了单独的模块,例如,对于浏览器中的RequireJS运行时,缩小仍然是相关的,因为这些文件大部分是通过网络获取的


如果您决定不提供缩小的代码,仍然建议您运行自己的测试,以查看标准缩小过程(例如使用UglifyJS)是否不会破坏软件

尽管对于许多消费者来说,没有必要缩小您的代码,但除了常规发行版之外,还建议提供一个缩小的捆绑包,以防有人从中受益

对于Angular、Vue、Ember等框架的插件/扩展,通常不需要缩小代码,因为它们都实现自己的构建管道,通常通过cli实现


脚本标记/CDN 这些都是小型化的主要目标。如果您在CDN上托管一个文件,或者通过web提供该文件以供直接
标记使用,那么您看到的就是您得到的。在这两种情况下,文件都必须通过网络传输。缩小可以节省字节


缩小与透明 这两者之间有一个非常重要的区别。尽管缩小并非总是必要的,但通常您有责任传输任何不可能与包受众的目标环境100%兼容的代码。这包括:

  • 将新的
    ES20XX
    语法传输到-maybly-ES5
  • Polyfilling任意
    ES20XX
    API实现

缩小和捆绑 如果您的软件包由一个单个捆绑包而不是一堆单独的模块组成,那么缩小规模始终是一个安全的选择。因为绑定器永远不会尝试任何与单个模块/实体有关的有趣的事情(比如树抖动),所以很可能您的代码在技术上不会因任何构建过程而发生任何更改


调试
如果您打算分发一个小型软件包,最好同时提供一个非小型软件包用于调试目的。

我认为这取决于意见,因为没有“正确”的答案(并因此投票决定关闭)-但如果我发布软件包,我会让这两个版本都可用。。。缩小是为了提高性能,而非缩小是为了可调试性。缩小Javascript通常是为了在连接速度较慢的web浏览器上获得好处。由于node.js通常在服务器上运行,并且文件保存在服务器上,因此在执行脚本时,您没有下载脚本。@Barmar也许我应该更明确地指出,在大多数情况下(我可能错误地概括了这一点),开发人员无论如何都会捆绑和缩小他们的所有代码,那么是否真的需要在包级别缩小?如果缩小,那么通过cdn从浏览器使用包非常容易,例如
,这个问题应该重新打开。正如投票率最高的答案所显示的那样,可以提出许多客观和有用的观点,帮助人们更好地决定是否缩小规模。关闭这样一个“基于意见”的问题毫无意义。它是否与我们必须在库的
package.json
中指定的JS文件有关?您会分别为
main
module
字段选择哪个文件?例如,如果我使用Webpack作为我的库的绑定器:
“main”:“library.js的dist/non-minified umd版本”
(库的非minified umd版本,在
.gitignore
中有
dist/
目录,用户将必须运行
npm run build
来生成
dist/non-minified umd版本的library.js
)和
“模块”:“src/es6模块版本的library.js”
(直接es6源入口点)?对的