goog.inherits присутствует в выходном файле

Я пытаюсь использовать Closure Compiler и Closure Library.

Когда я использую библиотеку, все в порядке, я включаю «base.js» в свою симуляцию, и она работает со всеми моими файлами javascript.

Проблема возникает, когда я «компилирую» свое приложение: в выходном файле у меня есть ссылка на функцию библиотеки закрытия «goog.inherits».

Из того, что я прочитал, нет необходимости включать «base.js» в производство. Я работаю над библиотекой, поэтому не хочу заставлять пользователей ссылаться на библиотеку Closure.

Как я могу сделать?

Вот мой код:

NM.ObjectEvent = function( type )
{
    goog.base(this);
}
goog.inherits( NM.ObjectEvent, NM.Event );

А скрипт выглядит так:

java -jar compiler.jar  --compilation_level SIMPLE_OPTIMIZATIONS --js_output_file myLib.js `find ../src/ -name '*.js'`

person user30088    schedule 16.06.2015    source источник
comment
Компилятор выводит один большой файл, в котором есть все, что вам нужно (например, все функции в base.js, если только компилятор не определит, что некоторые из них не используются), поэтому вы сможете просто обслуживать сам myLib.js.   -  person MatrixFrog    schedule 17.06.2015


Ответы (2)


То, что вы слышали, не относится к SIMPLE_OPTIMIZATIONS. При ADVANCED_OPTIMIZATIONS удаляется все неиспользуемое в base.js, при SIMPLE_OPTIMIZATIONS выполняются только локальные оптимизации функций, а неиспользуемые методы не удаляются.

Независимо от режима, если вы используете goog.inherits, он останется в той или иной форме. Что-то должно выполнять работу, которую выполняет goog.inherits для настройки цепочки прототипов.

person John    schedule 17.06.2015

Как сказал Джон, если у вас есть ссылки на goog.base и goog.inherits, вы ссылаетесь на библиотеку. К счастью, вы можете эмулировать эти функции... Что-то вроде этого должно работать...

NM.ObjectEvent = function( type )
{
    NM.Event.call(this, type);
}
(function(){
  var temp = function(){};
  temp.prototype = NM.Event.prototype;
  NM.ObjectEvent.prototype = new temp();
}();

Если вы используете goog.base в другом месте (например, для вызова методов суперкласса), вам потребуется проделать больше работы, но приведенного выше должно быть достаточно, если вы используете base и inherits только там, где показано в исходном сообщении.

person momo    schedule 17.06.2015