Как мне сообщить компилятору javascript Closure, чтобы он не запутывал имена методов webkitAudioContext?

Я использую конструктор webkitAudioContext, встроенный в браузеры webkit, в своем приложении, написанном с использованием javascript Google Closure.

После того, как я скомпилировал свой javascript с помощью Plovr в РАСШИРЕННОМ режиме, я обнаружил, что метод decodeAudioData моего объекта webkitAudioContext был переименован в запутанный термин c. Быть сознательным,

Перед компиляцией:

var myAudioContext = new webkitAudioContext();
myAudioContext.decodeAudioData(fileData, myCallBackFunction);

После компиляции:

(new webkitAudioContext).c(a,b);

Как мне сообщить компилятору javascript Closure, чтобы он не запутывал имена методов webkitAudioContext? я пытался позвонить

goog.exportSymbol('webkitAudioContext.prototype.decodeAudioData', webkitAudioContext.prototype.decodeAudioData);

но безрезультатно.


person dangerChihuahua007    schedule 04.09.2012    source источник
comment
Вот для чего нужны экстерны: developers.google.com/closure/compiler. /документы/   -  person Felix Kling    schedule 04.09.2012


Ответы (1)


Как отметил Феликс Клинг в своем комментарии, внешние файлы используются для предотвращения переименования символов, определенных извне. Исходный код Closure Compiler имеет файлы externs в следующих каталогах:

магистраль
|-- внешние
|-- contrib
|-- внешние

Внешний файл contrib/externs/w3c_audio.js включает webkitAudioContext.

См. параметр конфигурации plovr externs.

person Christopher Peisert    schedule 04.09.2012
comment
В настоящее время экспериментальные API-интерфейсы w3 не включены в внешние модули по умолчанию. Обычно им дается время на стабилизацию перед переходом на стандартные внешние модули. Как упомянул Крис, большинство из них можно найти в папке contrib. Однако нередко обнаруживаются отсутствующие свойства или методы, которые были добавлены/изменены с момента последнего обновления файла. - person Chad Killingsworth; 04.09.2012
comment
Спасибо! Указание "externs": "//chrome_extensions.js", в моем файле config.js работает. Однако указание "externs": "//w3c_audio.js," в моем файле конфигурации не работает, даже если я вручную загружаю и добавляю w3c_audio.js в папку contrib/externs. Нужно ли редактировать настройки где-то еще? - person dangerChihuahua007; 05.09.2012
comment
Указание "externs": "//w3c_audio.js" не работает, поскольку выпуск plovr за февраль 2012 г. поставляется вместе с версией 1559 Closure Compiler от 2 февраля 2012 г., которая не включает w3c_audio.js. Вам нужно указать путь к вашей локальной копии w3c_audio.js в конфиге plovr. - person Christopher Peisert; 05.09.2012