Google Closure Compiler Service提供的代码无效

时间:2016-01-31 17:44:14

标签: javascript jquery html5 google-closure-compiler velocity.js

我在https://closure-compiler.appspot.com/使用Closure Compiler来混淆/缩小我的JS代码,但是出了点问题。我设置了一个包含脚本的页面来重新创建问题。

我的HTML5代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js">
    </script>
  </head>
  <body>
    <p>text</p>    
    <script src="script.js"></script>
  </body>
</html>

我的JS代码:

$("p").text("val changed");
$("p").velocity({left: 60},{duration: 2000});

该代码正常运行,没有错误。 然后我想缩小/混淆它,所以我转到https://closure-compiler.appspot.com

我包含了jQuery和Velocity.js的url,并将优化设置为高级。

代码:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @code_url http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
// @code_url http://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js
// ==/ClosureCompiler==

$("p").text("val changed");
$("p").velocity({left: 60},{duration: 2000});

然后我等待几秒钟直到它被编译,然后生成一长串代码并将其复制到script.min.js中。之后我稍微更改了我的HTML文档:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>title</title>
  </head>
  <body>
    <p>text</p>    
    <script src="script.min.js"></script>
  </body>
</html>

然后我打开我的HTML页面,我收到以下错误:

Uncaught ReferenceError: $ is not defined

但是......我包含了jQuery和Velocity.js库,它们也被编译了。我做错了什么?

请帮助我,这很重要。

提前致谢!

1 个答案:

答案 0 :(得分:3)

请务必阅读Which Compilation Level is Right For Me?

简而言之,ADVANCED_OPTIMIZATIONS只能用于支持它的库。 jQuery源代码没有(你必须将它与externs一起使用)。

您应该使用SIMPLE_OPTIMIZATIONS级别,这与其他压缩编译器(如UglifyJS)大致相同,对大多数代码都是安全的。

SIMPLE_OPTIMIZATIONS将重命名不在全局范围内的变量。如果将代码包装在匿名函数中,则会看到此行为。