Sky*_*sey 12 javascript google-closure-compiler
我有一个日志API我想要暴露给一些内部JS代码.我希望能够使用此API进行记录,但仅限于我进行调试构建时.现在,我有部分工作.它只记录调试版本,但是当有常规版本时,对此API的调用仍然在代码中.当我使用goog.DEBUG = false编译时,我希望闭包编译器删除这个基本上死的代码.
日志定义:
goog.provide('com.foo.android.Log');
com.foo.Log.e = function(message){
goog.DEBUG && AndroidLog.e(message);
}
goog.export(com.foo.Log, "e", com.foo.Log.e);
Run Code Online (Sandbox Code Playgroud)
AndroidLog是一个提供给webview的Java对象,它将在其中运行,并且可以像这样正确地激活:
var AndroidLog = {};
/**
* Log out to the error console
*
* @param {string} message The message to log
*/
AndroidLog.e = function(message) {};
Run Code Online (Sandbox Code Playgroud)
然后,在我的代码中,我可以使用:
com.foo.Log.e("Hello!"); // I want these stripped in production builds
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何提供此API,在我的代码中使用此API,但是在未使用goog.DEBUG = true编译时,是否删除了对此API的任何调用?现在,我的代码库变得臃肿,一堆从未调用的Log API调用.我想删除.
谢谢!
好吧,事实证明,如果我停止导出 com.foo.Log() 及其方法,这很容易做到。如果我确实希望能够在某些特定情况下登录,但仍然删除内部代码中的日志调用,我可以为此声明两个类:
// This will get inlined and stripped, since its not exported.
goog.provide('com.foo.android.Log');
com.foo.Log.e = function(message){
goog.DEBUG && AndroidLog.e(message);
}
// Don't export.
// This be available to use after closure compiler runs, since it's exported.
goog.provide('com.foo.android.production.Log');
goog.exportSymbol("ProductionLog", com.foo.android.production.Log);
com.foo.android.production.Log.log = function(message){
goog.DEBUG && AndroidLog.e(message);
}
// Export.
goog.exportProperty(com.foo.android.production.Log, "log", com.foo.android.production.Log.log);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |