如何使用browserify获得缩小的输出?


90

刚开始使用browserify,但是我找不到有关如何使其散布在最小输出中的文档。

所以我看起来像:

$> browserify main.js > bundle.js --minified

9
缩小不在browserify的范围内,您需要通过一个缩小器运行它的输出。
generalhenry 2013年

Answers:


126

通过uglifyjs传递它:

 browserify main.js | uglifyjs > bundle.js

您可以使用npm进行安装,如下所示:

 npm install -g uglify-js

3
如何通过咕browser的browserify / watchify任务来做到这一点?
格雷格·恩尼斯

1
如果您使用grunt,建议您分两步进行。首先使用browserify进行编译,然后进行最小化。好处是您可以拥有带有源映射的开发版本和可以剥离所有内容的生产版本。
topek 2013年

是的,那就是我最终要做的。它实际上是3个步骤,您必须清理中间文件。谢谢!
格雷格·恩尼斯

8
以及如果我想要我的丑化文件的源映射,那将指向“浏览器修饰”之前的代码怎么办?
Thomas Deutsch 2014年

3
@ThomasDeutsch我为此做了一个插件

21

从3.38.x开始,您可以使用我的minifyify插件来最小化您的包,并且仍然具有可用的源地图。使用其他解决方案是不可能的-最好的办法是映射回未压缩的捆绑包。Minifyify一直将其映射回单独的源文件(是的,甚至是咖啡脚本!)


1
它说它支持最高版本的browserify9。Browserify当前为11.0.1。它会支持吗?
cchamberlain 2015年

uglifyify似乎是为我工作的一个很好的替代
布雷特·扎米尔

15

或使用uglifyify转换,它“在通过Browserify处理Uglify的“挤压”转换之前为您带来了好处,这意味着您可以删除有条件的代码路径。


仍然需要使用顶部答案中显示的uglify管道。他们在文档开始时就这么说。
carlin.scott 2016年

11

在花了几个小时研究如何构建新的构建过程之后,我认为其他人可能会从我最终所做的事情中受益。我正在回答这个老问题,因为它在Google中显得很高。

我的用例比OP要求的要复杂得多。我有三种构建方案:开发,测试,生产。由于大多数专业开发人员将有相同的要求,因此我认为超出原始问题的范围是可以原谅的。

在开发中,每当JavaScript文件更改时,我都会使用watchify来构建带有源映射的未压缩包。我不希望丑陋的步骤,因为我希望在完成Alt + Tab键浏览器以刷新之前完成构建,并且无论如何在开发过程中都没有任何好处。为此,我使用:

watchify app/index.js  --debug -o app/bundle.js -v

对于测试,我想要与生产完全相同的代码(例如uglified),但我还想要一个源映射。我通过以下方式实现了这一点:

browserify app/index.js  -d | uglifyjs -cm -o app/bundle.js      --source-map "content=inline,filename='bundle.js',url='bundle.js.map'"

对于生产,使用uglify压缩代码,并且没有源映射。

browserify app/index.js  | uglifyjs -cm > app/bundle.js

笔记:

我在Windows 7,MacOS High Sierra和Ubuntu 16.04上使用了这些说明。

我已停止使用minifyify,因为它不再维护。

也许有比我分享的更好的方法。我已经读过,在与browserify结合之前,通过丑化所有源文件显然可以获得更好的压缩效果。如果您有更多时间花在我上面,那么您不妨调查一下。

如果尚未安装watchify,uglify-js或browserify,请使用npm安装它们:

npm install -g browserify
npm install -g watchify
npm install -g uglify-js

如果您安装了旧版本,建议您升级。特别是uglify-js,因为它们对命令行参数进行了重大更改,从而使Google中出现的许多信息无效。


4

保留源映射时不再需要使用插件来缩小规模:

browserify main.js --debug | uglifyjs --in-source-map inline --source-map-inline > bundle.js

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.