Browserify生成一个*巨大的*输出文件

在node-google模块的帮助下,我编写了一个简单的节点模块来启用我的Web应用程序的“文本网页search”function,以我的观点之一呈现结果。
由于来自同一IP Google的相当less量的查询返回503错误后,我决定在客户端上使用该模块,所以限制是每个客户端,而不是每个服务器。
我确实使用browserify将节点模块转换为在客户端页面中获取的脚本。
该脚本只需要'google.js',它只是20行的JavaScript长:

'use strict'; var google = require('google'); var Google = Object.create({}); var Google.search = function(text, callback) { ... }); // end of the script 

我使用的命令很简单:

  $ browserify google-search-module.js -o app/scripts/google-search.js 

问题是,bro​​wserify产生的输出比我所期望的大得多:一个1.2 kB的模块变成了一个2.4 MB的脚本! 也许它也包括所有'谷歌'的依赖,但.. ..,

问题是:这是正常的吗? 我的search页面是否需要加载一个2.4 MB的文件来searchGoogle上的文本?

我很确定我错过了什么,但不明白是什么… 🙁

这是预期的行为。 Browserifyrecursion地加载所有使用require()导入的模块,并输出单个文件。 有办法解决这个问题,但他们不太可能在你的案件中工作。

通常情况下,使用Browserify,您可能在开发中使用一个巨大的包,但是然后构build一个更小的生产版本。 例如,如果您使用的是jQuery ,则可以将该程序包本地安装到您的node_modules文件夹中。 然后,对于生产,您可以设置--exclude标志使Browserify忽略node_modules文件夹中的任何内容,而是依靠CDN将jQuery传递给客户端。

我说这不太可能在你的情况下工作,因为node-google真的是一个Node模块。 不能保证它能在浏览器中工作(它可能会也可能不会)。 在开始计划下一行攻击之前,你应该确定它是否正在工作。

如果它正在工作,你有两种可能的补救措施:

  1. 缩小你的捆绑,并确保它是服务gzipped。 如果你能忍受的话,最终的文件大小可能会less于100kB。

  2. 找一些其他的模块来做一个Googlesearch,或者实现一个你自己的模块。 这可能是最好的解决scheme,除非你出于某种原因必须使用node-google。

当然,如果浏览器不工作,只有第二个解决scheme是可用的。