【发布时间】:2016-02-01 08:34:41
【问题描述】:
我在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 库,它们也被编译了。我做错了什么?
请帮帮我,这很重要。
提前致谢!
【问题讨论】:
-
输出是否包含 jQuery?请注意,这些库可能无法与高级编译一起正常工作,因为它们可能不是为它设计的。如果切换到其他模式,它会起作用吗?
-
是的,输出包含 jQuery。如果我切换到另一种模式,它就可以工作,但是闭包编译器不再对我有用,因为它不会更改变量名称等等。
-
好吧,如果您阅读有关高级编译模式的文档,您会发现代码必须以某种方式编写,以确保某些内容不会被重命名或删除。 jQuery 可能不是那样写的。 SIMPLE_OPTIMIZATION 重命名变量:developers.google.com/closure/compiler/docs/…
-
jQuery 的完整(不是缩小/混淆)版本是否应该与 Closure Compiler 一起使用?
-
对于
ADVANCED_OPTIMIZATIONS,绝对不是。
标签: javascript jquery html google-closure-compiler velocity.js