टाइपस्क्रिप्ट निर्माण के लिए d.ts फ़ाइलों की प्रतिलिपि नहीं बनाता है
तो शायद मैं उलझन में हूं, लेकिन मैंने सोचा कि अगर मैंने declaration:trueअपने tsconfig.json में जोड़ा, तो मैं अपनी *.d.tsफ़ाइलों की प्रतिलिपि tsc कर सकता था , साथ में ट्रांसप्लड कोड & यह d.tsफाइलें?
ईजी:
- src
- lib
- types.d.ts
- foo.ts
मुझे उम्मीद है कि tsc के परिणाम कुछ इस तरह होंगे:
- build
- lib
- types.d.ts
- foo.js
- foo.d.ts
हालाँकि, मुझे लगता है types.d.tsकि मेरी बिल्ड डायरेक्टरी को कॉपी नहीं किया जा सकता है।
क्या टाइपस्क्रिप्ट .d.tsफ़ाइलों को कॉपी करने के लिए कोई तंत्र प्रदान नहीं करता है ? या क्या मुझे कहीं ग़लतफ़हमी है? (मैंने इस बिंदु पर कई अलग-अलग कॉन्फ़िगरेशन की कोशिश की है; कुछ भी काम नहीं करता है)
जवाब
आप सही हैं - declaration:trueइसका तात्पर्य यह है कि केवल प्रत्येक दी गई .tsफ़ाइल tscजेनरेट करने के लिए और इसी .d.tsआउटपुट फाइल को buildनिर्देशिका में ( .jsऔर .mapयदि लागू हो तो) कॉपी करती है । इसलिए tscअपनी कस्टम types.d.tsफ़ाइल को आउटपुट डायरेक्टरी में कॉपी नहीं करेंगे ।
मूल रूप से .d.tsफ़ाइलों को कंपाइलर के लिए टाइप जांच करने के लिए अछूत इनपुट के रूप में देखा जाता है। उनका उपयोग किसी भी उत्पादन पीढ़ी के लिए नहीं किया जाता है, जिसका अर्थ यह भी है कि वे नकल नहीं करते हैं build। आप और पढ़ सकते हैंhttps://github.com/Microsoft/TypeScript/issues/5112 अनुरक्षकों के दृष्टिकोण के बारे में:
आपके द्वारा उपयोग की जाने वाली .d.ts फाइलें बिल्ड सिस्टम के लिए एक इनपुट हैं, लेकिन आउटपुट नहीं। .D.ts से कुछ प्रकारों का उपभोग करना पूरी तरह से उचित है, लेकिन क्या आपका आउटपुट उन प्रकारों का उपयोग नहीं करता है, इसलिए आपके बिल्ड परिणामों के साथ इनपुट .d.ts को वितरित करने का कोई कारण नहीं होगा। [...] ऐसा लगता है कि आप अपने बिल्ड टूल में संबंधित .d.ts फ़ाइलों को कॉपी करने के लिए जहाँ भी आपको ज़रूरत हो, पोस्ट-बिल्ड स्टेप चाहते हैं।
.D.ts फ़ाइलों को "संदर्भ" माना जाता है जो संकलक उन्हें स्पर्श नहीं करेगा, उन्हें स्थानांतरित नहीं करेगा, या उन्हें पुनः बनाएगा। .D.ts फ़ाइलों के बारे में सोचने का एक आसान तरीका यह है कि वे आपकी .js फ़ाइलों के साथ-साथ चलती हैं। यदि आप .js फ़ाइलों की प्रतिलिपि बना रहे हैं, तो आपको मिलान .d.ts की प्रतिलिपि बनाना चाहिए।
समाधान # 1: मैन्युअल बिल्ड चरण के माध्यम से d.ts फ़ाइलों की प्रतिलिपि बनाएँ
एक संभावित समाधान एक निर्माण चरण में सभी आवश्यक .d.tsफ़ाइलों को types.d.tsमैन्युअल रूप से कॉपी करना है। ठोस उपकरण आपकी परियोजना पर वरीयता और आश्रित हैं और अन्य लोगों के बीच प्रकार, ओएस का निर्माण करते हैं। srcफ़ाइलों को कॉपी करते समय यह उपकरण निर्देशिका संरचना को संरक्षित करना चाहिए build, ताकि importप्रकार के संदर्भ अभी भी काम करें। कुछ नाम है:https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux(शेल), rsync, robocopyया एक मंच स्वतंत्र NPM पैकेज की तरहhttps://www.npmjs.com/package/copyfiles:
"scripts": {
"copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}
समाधान # 2: रिवॉर्ड d.ts फ़ाइलों को .ts एक्सटेंशन में
अपनी .d.tsफ़ाइलों को .tsविस्तार (या मौजूदा .tsफ़ाइलों में प्रकारों को फिर से एकीकृत करने) के लिए पुन: समन्वित करें , इसलिए tscआउटपुट में घोषणाओं का ध्यान रखना। थोड़ा नुकसान: आपके पास प्रकार और कार्यान्वयन कोड के बीच कोई संकलित जुदाई d.tsनहीं है ( फ़ाइलों को कोड शामिल करने की अनुमति नहीं है)। बड़ा फायदा यह है कि आपको एक अतिरिक्त निर्माण कदम की आवश्यकता नहीं है।
मेरी राय में, उत्तरार्द्ध आपके npm पैकेज के लिए एक सार्वजनिक API उदा। उत्पन्न करने का सबसे आसान तरीका है, जबकि एक .d.tsफ़ाइल आंतरिक रूप से उपयोग और साझा प्रकार की घोषणा के लिए एक उम्मीदवार बना सकती है।
उम्मीद है की वो मदद करदे।