Решение этой проблемы указано, если кратко, в подзаголовке Решение для вызова из скомпилированного кода во внешний код: Externs в документе, который вы связали.
Я полагаю, ваше замешательство происходит от слов «сторонний» и «внешний».В контексте этого документа можно предположить, что «сторонний» и «внешний» относятся как к коду, написанному другими, так и к и к любому коду, который приходит из любых файлов, скомпилированных отдельно (вами или другими лицами).
В этом случае можно либо добавить /** @export */
к переменным, которые вы не хотите переименовывать, либо определить файл externs для своих источников.
Alternate 1
Если вы хотите продолжать использовать window
таким образом (это может быть некрасиво, в некоторых случаях это уместно), вы должны изменить
var val = getValue;
до
var val = window['getValue'];
Например:
document.addEventListener("DOMContentLoaded", function() {
var val = window['getValue'];
document.querySelector( ".button" ).addEventListener( "click", upButton );
function upButton() {
val++;
document.querySelector( ".show" ).innerText = val;
}
} );
компилируется в
document.addEventListener("DOMContentLoaded", function() {
var a = window.getValue;
document.querySelector(".button").addEventListener("click", function() {
a++;
document.querySelector(".show").innerText = a;
});
});
Альтернативный 2
Использование ES6модули .Закрывающий компилятор поддерживает их с флагом module_resolution
.
Общее чтение: Код инкапсуляции с модулями :
Альтернативный 3
Используйте модули библиотеки Google Closure (goog.module, goog.require и (не рекомендуется) goog.provide).