Javascript Closure 编译器——导出全局变量

标签 javascript google-closure-compiler

我的 webapp 基于一个通用脚本,我在其中定义了通用函数和一个全局变量以及处理这些函数的动态加载脚本。到目前为止,我发现导出全局变量的唯一方法是用 window["myGlobalVar"] 替换任何出现的地方,但我发现它非常难看。有更好的方法吗?

这是一个例子

// commonscript.js before compilation
function incrementVariable() {window["myGlobalVar"]++;}
window["incrementVariable"] = incrementVariable;
window["myGlobalVar"] = 0;

在另一个脚本中

alert(myGlobalVar); // <= alerts 0
incrementVariable();
alert(myGlobalVar); // <= alerts 1

我正在寻找一种在两个文件中直接使用 myGlobalVar 的方法,因为这样会更优雅。但是,我需要将 window["myGlobalVar"] 设置为指针而不是对象的副本,我不确定如何在简单类型上执行此操作。

这可能吗?将 myGlobalVar 封装在 Object 中是唯一的其他方式吗?

非常感谢你的灯。

最佳答案

新答案

Closure-compiler 支持一个@nocollapse 注释来防止一个属性被折叠成一个全局变量。这允许属性在导出时可变。

@nocollapse 不会阻止重命名 - 您仍然需要导出一个属性来完成它。

@nocollapse 当前仅在从源代码编译时受支持。它将包含在下一个版本中 - 即 v20150315 版本之后的版本。

旧答案

@expose 现已弃用。编译器将对 @expose

的任何使用发出警告

有一个新的但迄今为止未记录的注释:@expose。这个单一的注解既会导出一个属性,又会防止它从构造函数中折叠起来。这听起来非常适合您的情况 - 但它需要您的变量是对象的属性。

但是,请谨慎使用。任何具有 @expose 的属性都不会被重命名,也不会作为死代码被删除。这使得它对于 javascript 库编写者的使用尤其成问题。

关于Javascript Closure 编译器——导出全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376025/

相关文章:

javascript - 如何在 PowerShell 中捕获闭包编译器输出?

javascript - 使用异步/等待延迟强制请求之间的时间

javascript - 使用 Twitter Bootstrap 调整页面大小时更改 css 中 div 的高度

javascript - PropTypes.shape 的默认 Prop 类型应该是什么?

javascript - 如何使用closurebuilder.py通过Google Closure Compiler编译我的库

javascript - 对于不同的文件,闭包编译器抛出 "Variable ... declared more than once"

javascript - 为什么 Google 的闭包编译器会留下一些不必要的空格或换行符?

javascript - $(元素)[索引].addClass();不起作用

javascript - Jquery如果div不存在

javascript - 谷歌闭包编译器提示 typeof 调用中未声明的变量