Я пытаюсь использовать компилятор закрытия Google, чтобы разделить код моего приложения в зависимости от того, где он будет запускаться (на сервере или на клиенте) с помощью одной переменной. В этом примере все, что будет вызываться на сервере, находится за переменной isServerSide
, НО код компилируется для клиента. Поэтому я установлю для 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
(или я просто не понимаю, для чего на самом деле должны использоваться внешние).
Любые предложения о том, как заставить это работать?
app.js
наapp_client.js
иapp_server.js
, чтобы код клиент/сервер всегда вызывал соответствующие версии? - person hyperslug   schedule 09.11.2011@define
в вашем скрипте, а затем используйте переключатель компилятора--define
, чтобы включить/выключить его. В этом случае вы получите ожидаемый результат. - person Stephen Chung   schedule 09.11.2011