谷歌闭包编译器-基于外部的死代码删除
Google Closure Compiler - Dead code removal based on externs
我试图使用谷歌闭包编译器拆分我的应用程序代码基于它将在哪里运行(在服务器vs客户端)通过一个单一的变量。在本例中,将在服务器上调用的所有内容都位于isServerSide
变量后面,但是,正在为客户端编译代码。因此,我将isServerSide
设置为false,并让编译器删除所有不会由客户端运行的内容…
Inside of app.js
:
goog.provide('my.app');
my.app.log = function(message) {
document.write(message);
}
my.app.initClientSide = function() {
my.app.log('hello client');
}
my.app.initServerSide = function() {
my.app.log('hello server');
}
if (isServerSide) {
my.app.log('initing server');
my.app.initServerSide()
}else my.app.initClientSide();
externs.js
内部:
/**
* @define {boolean} is server side?
*/
var isServerSide=false;
命令:
java -jar bin/compiler.jar --js closure-library/closure/goog/base.js --js app.js --externs externs.js --manage_closure_dependencies true --process_closure_primitives true --summary_detail_level 3 --warning_level VERBOSE --compilation_level=ADVANCED_OPTIMIZATIONS --closure_entry_point my.app
预期输出:document.write("hello client");
实际输出:isServerSide?(document.write("initing server"),document.write("hello server")):document.write("hello client");
如果我在app.js
中手动输入isServerSide=false;
,那么我可以让它编译成这样:
isServerSide=false;document.write("hello client");
这让我觉得我设置我的externs.js
错误(或者我只是不明白外部应该实际用于什么)。
关于如何使它工作有什么建议吗?
您可以通过在编译器调用中直接设置@define值来指定它们。外部变量有不同的用途,比如超插入正确的状态。
你通过把@define定义(从你的extern)放入app.js,然后像这样调用编译器来实现预期的结果:
java -jar compiler.jar '
--define "isServerSide=false" '
--js closure-library/closure/goog/base.js '
--js app.js '
--manage_closure_dependencies true '
--process_closure_primitives true '
--summary_detail_level 3 '
--warning_level VERBOSE '
--compilation_level=ADVANCED_OPTIMIZATIONS '
--closure_entry_point my.app
相关文章:
- 如何从rails中的代码中删除新行( )
- 解析云代码作业:删除在数据库中已经存在一个小时的行
- 改进js代码以删除全局变量和函数
- 如何在 JavaScript 中使用正则表达式从颜色代码中删除“#”
- 从此代码中删除 Jquery
- 从生产版本的javascript代码中删除断言
- 如何从代码中删除C样式注释
- 从 json 代码中删除 javascript 对象变量名称文本
- 代码点火器 - 删除而不刷新页面
- 如何在国家/地区代码后删除 0
- 从跟踪代码中删除管道字符
- 从 dom 文本中删除美元符号 - 而不是从 js 代码中删除
- 如何从电子邮件格式检查器代码中删除错误文本
- 如何从此代码中删除时间
- 为什么这个代码(同时删除几个项目)会挂在防火墙后面
- 为什么这个jquery代码不删除li列表项
- 如何从下面的代码中删除数据库中的图像
- 从jQuery的代码中删除不必要的函数
- 在CKEditor上显示代码,删除abbr标签
- 如何在此Javascript代码中删除特殊字符