将多个JavaScript文件压缩为单独的文件

时间:2012-03-28 12:47:59

标签: javascript jquery-mobile yui-compressor

我知道有关javascript压缩的问题已被多次询问,但我找不到任何回答我的问题。

我有一个项目,它有常见的脚本(jQuery和其他一些)和页面特定的脚本。 jQuery Mobile允许您在会话期间通过仅下载<head>一次的任何内容来缓存常见脚本。只要您将<script>放在<div data-role="page">中,只有在加载页面时才会提取特定脚本。

我觉得这很棒,因为它可以优化浏览我的应用页面时下载的脚本,并确保浏览器随时都有最小的内存javascript。

但是,缩小是很糟糕的,因为不能合并的各种文件之间存在依赖关系。

到目前为止,我发现了两个不太适合我的解决方案:

  • 使用不会更改函数和变量名称的简单缩小脚本:与高级版本相比,文件大小翻倍
  • 将所有脚本分组并压缩然后将其放入<head>:您将无法下载您可能需要的脚本并且浏览器已加载了不必要的功能

(我排除了显然手动更改功能名称;))

我正在寻找可以执行以下操作之一的压缩器:

  • 将所有文件压缩在一起,但将它们输出到单独的文件中以保持模块性
  • 如果不可能的话,以高级方式独立压缩文件,但标签可能会阻止minifier重命名链接到外部函数或变量(如jQuery的)

它存在吗?

1 个答案:

答案 0 :(得分:0)

在熟悉所有这些之后,Google Closure Compiler可以做到这一点(以及更多)。

要做的是定义外部:

  • 您正在使用的第三方库(jQuery,jQuery Mobile ...)。您可以找到some of them there
  • 单独加载的自制脚本

显然,如果压缩单独加载的自制脚本,则应使用以下技术(detailed in Closure Compiler documentation)导出要在其他地方使用的变量:

/**
 * A function you want to be able to call from elsewhere after compressing
 * @param {string} a
 */
function exportedFunction(a) {alert(a);}

window['exportedFunction'] = exportedFunction;

然后,您可以批量或单独压缩所需的文件。它是如此强大的工具,我无法相信我之前没有使用它。