我在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库,它们也被编译了。我做错了什么?
请帮助我,这很重要。
提前致谢!
答案 0 :(得分:3)
请务必阅读Which Compilation Level is Right For Me?
简而言之,ADVANCED_OPTIMIZATIONS
只能用于支持它的库。 jQuery源代码没有(你必须将它与externs一起使用)。
您应该使用SIMPLE_OPTIMIZATIONS
级别,这与其他压缩编译器(如UglifyJS)大致相同,对大多数代码都是安全的。
SIMPLE_OPTIMIZATIONS
将重命名不在全局范围内的变量。如果将代码包装在匿名函数中,则会看到此行为。