您好,我想集成Google的Closure编译器,以ADVANCED_OPTIMIZATIONS模式压缩我的文件,但是我有2个压缩文件,我需要在两者之间共享变量。
我阅读了本文档https://developers.google.com/closure/compiler/docs/api-tutorial3
问题
我收到此错误:
ReferenceError:未定义getValue
所以我试图用window ['getValue']代替getValue,但是它不起作用。
基本代码
第一个JS文件:
var nb0 = 0;
var nb1 = 1;
var nb2 = 2;
var nb3 = 3;
function getValue( nb ) {
return nb;
}
window['nb0'] = nb0;
window['nb1'] = nb1;
window['nb2'] = nb2;
window['nb3'] = nb3;
window['getValue'] = getValue;
第二个JS文件:
document.addEventListener("DOMContentLoaded", function() {
var val = getValue;
document.querySelector( ".button" ).addEventListener( "click", upButton );
function upButton() {
val++;
document.querySelector( ".show" ).innerText = val;
}
} );
答案 0 :(得分:0)
在子标题下简要说明了该问题的解决方案 Solution for Calling out from Compiled Code to External Code: Externs 在您链接的文档中。
我想您的困惑来自“第三方”和“外部”这两个词。在本文档的上下文中,您可以假定“第三方”和“外部”是指由他人编写的代码,和均来自单独编译的文件(由您或他人编写)中的任何代码。
然后的解决方案是在/** @export */
之前添加您不想重命名的var,或为您的源定义一个externs文件。
如果您希望以此方式继续使用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;
});
});
使用ES6 modules。闭包编译器supports these with the module_resolution
flag。
一般阅读:Encapsulating Code With Modules :
使用Google Closure Library's modules(goog.module,goog.require和(不建议使用)goog.provide)。