我正在尝试使用 Google Closure Compiler 根据将要运行的位置(在服务器与客户端上)通过单个变量来拆分我的应用程序代码。在此示例中,将在服务器上调用的所有内容都在isServerSide
var 后面,但是,正在为客户端编译代码。所以我将设置isServerSide
为 false 并让编译器删除客户端不会运行的所有内容......
内部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");
如果我手动输入isServerSide=false;
,app.js
那么我可以将其编译为:
isServerSide=false;document.write("hello client");
这让我觉得我设置externs.js
错了(或者我只是不明白 externs 应该实际用于什么)。
关于如何使它工作的任何建议?