压缩脚本时,JavaScript停止工作

时间:2009-11-17 02:51:45

标签: javascript optimization jscompress

我想压缩我的2000多行javascript并测试了http://dean.edwards.name/packer/http://closure-compiler.appspot.com/home

但在这两种情况下,压缩脚本都会给我带来错误。 错误的一个示例是jQuery(document).Da is not a function

为什么我的脚本在优化后不起作用? 我该怎么做才能优化/压缩我的脚本?

3 个答案:

答案 0 :(得分:6)

确保每个JavaScript文件的开头都有分号。奇怪,我知道,但这就是原因:

您可能在一个文件中有这样的内容:

function someFunc() {
   ...
}

在下一个文件中跟这样的东西(这是多少jQuery插件看起来):

(function($) {
   ...
})(jQuery);

压缩成这个:

function someFunc(){ }( function($){...} )(jQuery);

本质上以someFunc为基础调用function($){...}作为参数。然后,它将接受返回的任何内容,并假设它是一个函数,并以jQuery作为参数调用它。

这就是为什么大多数jQuery插件都以;(function($){开头。

在每个文件的开头添加分号(或结尾,但使其保持一致)将使您的脚本看起来像:

;function someFunc(){ }; (function($){...})(jQuery);

这样,您的脚本将被解释为预期。

答案 1 :(得分:3)

您可以尝试使用在线YUI Compressor。这是谷歌的第一个结果:http://www.refresh-sf.com/yui/

答案 2 :(得分:0)

我有同样的问题。每次我想缩小我的javascript文件,包括一些jquery-plugins我得到一个错误。 首先,我试图解决附加分号的问题,因为nicholaides在他的上一篇文章中解释过。即使有他的建议,我也无法设法缩小我的js文件而不会出错。 之后我在每个jquery-plugin中更改了以下行并为我工作; 例如:

(function($) {
$.fn.defaultInputs = function(settings) { ...

我已经简化为

jQuery.fn.defaultInputs = function(settings) { ...