Javascript 在闭包编译器中连接和编译丑陋的javascsript

Javascript 在闭包编译器中连接和编译丑陋的javascsript,javascript,gruntjs,google-closure-compiler,Javascript,Gruntjs,Google Closure Compiler,对于某些javascript软件包,我只能得到缩小的/uglified文件。我需要将它们与我的其他javascript文件结合起来,并使用google闭包编译器进行编译 我的问题是: 是否最好将原始的未统一javascript传递给闭包编译器,而不是丑陋的闭包编译器?(尤其是高级优化模式。) 由于许多javascript库本身提供了精简版本(如jquery和angularjs),我是否需要担心是否在另一个精简任务(uglify或closure compile)中包含了这些脚本。或者我应该挑出它们

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

我的问题是:

是否最好将原始的未统一javascript传递给闭包编译器,而不是丑陋的闭包编译器?(尤其是高级优化模式。)


由于许多javascript库本身提供了精简版本(如jquery和angularjs),我是否需要担心是否在另一个精简任务(uglify或closure compile)中包含了这些脚本。或者我应该挑出它们并只将它们连接起来

如果你喜欢微优化,你可能会想看看几个迷你们,看看哪个最适合你的代码库。主要的有UglifyJS、Google闭包编译器和ESMangle。有一个。通过几个小型程序运行代码似乎有些过分,但如果它能产生更好的结果,为什么不呢?:-)

迷你们不在乎你是否传递了已经缩小的东西;作为一个例子,我在生产中使用了r.js Optimizer,它将我未统一的源代码和缩小的jQuery等连接起来,然后使整个过程变得丑陋


您不必真正担心重新统一库,它所要做的只是在构建步骤上增加更多的时间,因此,如果花费的时间太长,您可以将库从minifier中分离出来,并简单地将它们连接起来。

根据库的不同,有两种路径:

  • 如果库提供未统一的源代码,并且已知它与
    高级\u优化
    兼容,那么最好的选择是将其作为源文件传入。此选项可以在库源代码和源代码上消除死代码

  • 如果库仅提供缩小的源代码,或者已知它与
    高级\u优化
    不兼容,那么最好的选择是使用库的外部程序编译代码。为了最大限度地减少请求数量,您仍然应该将结果连接在一起。虽然您可以只使用编译器的
    空白_
    级别,但它可能不是最好的工具


  • 当然,将库与源代码相结合可以最大限度地减少请求,但同时也会抵消使用CDN托管库所带来的任何缓存好处。

    如果浏览器能够理解缩小的脚本,那么声称是JS“编译器”的工具也应该如此。唯一可能出现的问题是,如果不同的缩小脚本使用相同名称的全局变量……因为缩小通常包含将变量重命名为“短”名称,如
    a
    b
    ,等等,这可能会发生。但是好的脚本无论如何都不会使用全局变量,对吗?闭包编译器来说这是不正确的。闭包编译器的好处(包括类型检查、静态分析和死代码消除)不仅仅是缩小。通过它运行已经缩小的代码并不是它真正的设计目的,也不会得到很好的结果。