如何使用闭包编译器优化Javascript并保留函数名?
我有一个javascript文件(lib.js),我想使用一些 函数,但我不想加载完整的lib.js 然而,我还没有弄明白如何做我想做的事。我想 使用命令行 lib.js如何使用闭包编译器优化Javascript并保留函数名?,javascript,google-closure-compiler,Javascript,Google Closure Compiler,我有一个javascript文件(lib.js),我想使用一些 函数,但我不想加载完整的lib.js 然而,我还没有弄明白如何做我想做的事。我想 使用命令行 lib.js function dog() { return 'Fido'; } function famous_human() { return 'Winston'; } function human() { return famous_human(); } code-calling-functions-in
function dog() {
return 'Fido';
}
function famous_human() {
return 'Winston';
}
function human() {
return famous_human();
}
code-calling-functions-in-lib.js
alert(human());
所需结果,lib-compiled.js
function a() {return 'Winston';}function human() {return a();}
- 功能狗被删除,因为我不使用它李>
- 优化了人的功能李>
- 函数human有它的原始名称,因为我想从其他代码调用它李>
- code-calling-functions-in-lib.js中没有代码
function human() {
return famous_human();
}
window['human'] = human;
由于导出符号会阻止死代码消除,因此最佳做法是将特定于项目的导出保存在单独的文件中,而不包括在库中
例子
库源代码-liba.js
项目特定的导出-Project_Exports.js
编译命令
好的,但是你能更具体一点吗?我可能真的很愚蠢,但我确实需要一个证明自己愚蠢的例子。关于这个问题,我已经读了很多书,尝试了很多例子,但是我没有让它发挥作用。是的@user2473324作为第一个让它发挥作用的尝试,你可以把这一行放在
lib.js
中。在@user2473324上尝试一下,当我用额外的导出行编译你问题中的三个函数时,我得到的结果是:window.human=function(){return“Winston”}
,这将允许您从其他脚本调用human()
,因为window
是全局上下文。我相信@Chad Killingsworth比我更熟悉闭包,所以也许他也可以给出一些建议。@user2473324注释中有太多的内容需要解释,所以我在答案中添加了示例。
function human() {
return famous_human();
}
window['human'] = human;
function dog() {
return 'Fido';
}
function famous_human() {
return 'Winston';
}
function human() {
return famous_human();
}
window['human'] = human;
java -jar compiler.jar \
--compilation_level ADVANCED_OPTIMIZATIONS \
--js liba.js \
--js project_exports.js \
--js project_source.js \
--js_output_file project_compiled.js