在闭包编译器中连接和编译uglified javascript

时间:2013-10-30 06:35:05

标签: javascript gruntjs google-closure-compiler

对于某些javascript包,我只能获得缩小/ uglified文件。我需要将它们与我的其他javascript文件结合使用并使用google closure编译器进行编译。

我的问题是:

是否最好将原始未分化的javascript传递给闭包编译器,而不是uglified? (特别是高级优化模式。)

由于许多javascript库本身提供了缩小版本(如jquery和angularjs),如果我将这些脚本包含在另一个缩小任务(uglify或闭包编译)中,我是否需要担心。或者我应该将它们单独出来并且只连接它们?

2 个答案:

答案 0 :(得分:2)

如果您需要进行微优化,您可能需要查看几个缩小器,以了解哪种最适合您的代码库。主要是UglifyJS,Google Closure Compiler和ESMangle。那是nice comparison on the Uglify website。通过几个minifiers运行代码可能看起来有点矫枉过正,但如果它产生更好的结果,那么为什么不呢。 : - )

如果你传入已经缩小的东西,Minifiers不会在意;作为一个例子,我在生产中使用了r.js优化器,并且连接了我的未经编辑的源代码和缩小的jQuery等,然后整理了整个批次。

你不需要真正担心提醒图书馆,它所要做的就是在构建步骤上增加更多时间,所以如果它花费的时间太长,你就可以分开minifier中的库只是连接它们。

答案 1 :(得分:1)

根据库有两种路径:

  1. 如果库提供了未分解的源,并且已知它与ADVANCED_OPTIMIZATIONS兼容,那么最好的选择是将其作为源文件传递。此选项可以从库源和源代码中消除死代码的好处。

  2. 如果库只提供缩小的源或已知与ADVANCED_OPTIMIZATIONS不兼容,那么最好的选择是使用externs为库编译代码。为了最大限度地减少请求数量,您仍应将结果连接在一起。虽然您可以使用编译器的WHITESPACE_ONLY级别,但它可能不是最好的工具。

  3. 当然,将库与源组合在一起可以最大限度地减少请求,但同时也会因使用CDN进行库托管而无效。