2015-10-02 8 views
5

में परिभाषित करता है सी # में, आप #if DEBUG कर सकते हैं ... डिबगिंग करते समय कुछ विशेष करने के लिए। मैं टाइपस्क्रिप्ट में एक समान चीज़ करना चाहता हूं ताकि परीक्षण के दौरान मैं फॉर्म मान सेट कर सकूं।प्रीप्रोसेसर टाइपस्क्रिप्ट

किसी को भी टाइपस्क्रिप्ट में इसे कार्यान्वित करने के बारे में कोई सुझाव है?

export class Settings { 
    static isDebugging = false; 
}; 

फिर जब एप्लिकेशन शुरू, मैं इसे सही पर सेट:

सबसे अच्छा मैं के साथ आए हैं

एक सेटिंग वर्ग है।

तब कोड में, मैं कक्षा आयात और अगर यह सच है या नहीं की जाँच करें।

if (Settings.isDebugging)... 

ठीक काम करने लगता है। संकलन उत्पादन हमेशा एक ही है, क्योंकि

उत्तर

1

आप सी # से #if निर्देशों को कुछ इसी तरह हासिल करना चाहते हैं, तो आप कुछ है कि कुछ कोड को आपकी ऐप्लिकेशन बनाया गया है स्ट्रिप्स करना होगा।

कि ऐसा करने के लिए, कुछ का निर्माण कर रहे हैं प्लग इन का उपयोग कर सकते हैं।

/* test-code */ 
removeMeInProduction(); 
/* end-test-code */ 

हालांकि, इन प्लग-इन का उपयोग करके आप test-code या end-test-code की अपनी वर्तनी में गलती कर सकता है: वहाँ कुछ निर्माण प्लगइन्स (here और here देखें) कि कोड है कि निर्माण के समय में इस तरह की टिप्पणियां भीतर है हटेगा हैं जिससे आप उत्पादन में टेस्ट कोड छोड़ सकते हैं। आपको इसके बारे में एक संकलन त्रुटि नहीं मिलेगी।

इस वजह से, शायद एक बिल्ड प्लगइन ढूंढना बेहतर है जो उसके नाम के आधार पर एक फ़ंक्शन स्ट्रिप करता है (देखें here - दुर्भाग्य से मुझे इसके लिए एक गल्प प्लगइन नहीं मिल रहा है)। इस तरह आप कुछ इस तरह लिख सकते हैं:

function ifNotProduction(func:() => void) { 
    func(); 
} 

फिर इसका इस्तेमाल:

ifNotProduction(() => { 
    console.log("Only run when test."); 
}); 

और फिर जब यह एक उत्पादन का निर्माण नहीं है कि समारोह के उपयोग के बाहर पट्टी का निर्माण स्क्रिप्ट बताओ।

कुल मिलाकर, हालांकि, सिर्फ एक बूलियन जाँच के अपने सरल उपाय काफी अच्छा है।

2

झंडे #if DEBUG तरह टाइपप्रति में उपलब्ध नहीं हैं। सी # में जब आप डीबग मोड को संकलित करते हैं तो DLL फ़ाइलों में डीबगिंग के लिए कुछ अतिरिक्त जानकारी शामिल होती है। रिलीज मोड में जानकारी छोड़ी जाती है और DLL फाइलें हल्की होती हैं।

आप एक स्वचालित निर्माण पर्यावरण Gulp या Grunt की तरह आप /config/debug/config.ts और /config/release/config.ts की तरह एक फ़ोल्डर के अंतर्गत अपनी सेटिंग स्टोर कर सकते हैं का उपयोग कर रहे हैं तो आप दो कार्यों बना सकते हैं:

डिबग के लिए एक:

$ gulp bundle-debug 

और रिलीज के लिए

$ gulp bundle-release 

एक फ़ाइल या किसी अन्य की प्रतिलिपि बनाने के लिए।

+1

यह भी एक अच्छा जवाब है। –

1

वहाँ कोड है कि टाइपप्रति में पूर्वप्रक्रमक निर्देश के लिए समर्थन जोड़ता है: https://github.com/Microsoft/TypeScript/issues/4691

हालांकि यह चर्चा के अंतर्गत है अगर यह टाइपप्रति उचित का एक हिस्सा बन जाएगा। तब तक वर्कअराउंड अधिकतर बाहरी निर्माण उपकरण, या विभिन्न कॉन्फ़िगरेशन विकल्प (जो संकलन समय पर स्ट्रिप कोड) और जादू चर (जो रनटाइम पर कोड पथ अक्षम करते हैं) का उपयोग करने के लिए अधिकतर होते हैं

संबंधित मुद्दे