मेरे पास एक लॉगिंग एपीआई है जो मैं कुछ आंतरिक जेएस कोड को बेनकाब करना चाहता हूं। मैं लॉग इन करने के लिए इस एपीआई का उपयोग करने में सक्षम होना चाहता हूं, लेकिन केवल तभी जब मैं डीबग बिल्ड कर रहा हूं। अभी, मैं इसे आंशिक रूप से काम कर रहा हूँ। यह केवल डीबग बिल्ड पर लॉग ऑन करता है, लेकिन नियमित रूप से निर्माण होने पर इस एपीआई के कॉल अभी भी कोड में हैं। जब मैं 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);
AndroidLog वेबव्यू इस में चला जाएगा के लिए प्रदान की एक जावा वस्तु है, और ठीक से इस तरह externed:
var AndroidLog = {};
/**
* Log out to the error console
*
* @param {string} message The message to log
*/
AndroidLog.e = function(message) {};
फिर, मेरे कोड में, मैं उपयोग कर सकते हैं :
com.foo.Log.e("Hello!"); // I want these stripped in production builds
मेरा प्रश्न यह है: मैं इस एपीआई को कैसे प्रदान कर सकता हूं, इस एपीआई का उपयोग अपने सभी कोड पर करें, लेकिन फिर एच जब आप goog.DEBUG = true के साथ संकलित नहीं करते हैं तो इस एपीआई को किसी भी कॉल को हटा दिया जाता है? अभी, मेरा कोड बेस लॉग एपीआई को कॉल के गुच्छा के साथ फूला हुआ है जिसे कभी नहीं कहा जाता है। मैं हटा देना चाहता हूँ।
धन्यवाद!
ठीक है, कुछ और खुदाई के बाद, ऐसा लगता है कि externed कार्यों inlined नहीं कर रहे हैं। http://code.google.com/p/closure-compiler/issues/detail?आईडी = 230 मैं अभी भी goog.DEBUG और –
के साथ प्रत्येक कॉल को प्रीपेड करने के अलावा एक कामकाज ढूंढना चाहूंगा। मैंने अपनी बिल्ड प्रक्रिया के हिस्से के रूप में स्रोत से बाहर अपने सभी डीबग संदेश को पट्टी करने के लिए पाइथन में एक छोटी लिपि लिखी थी। जब मुझे इसकी ज़रूरत होती तो मुझे कुछ मिल सकता था। यह अजीब है क्योंकि यह एक आम आवश्यकता होनी चाहिए। – jfriend00
हाँ, मैं उस मार्ग पर जा सकता हूं :) –