2014-04-25 12 views
12

का उपयोग कर एक खोल निष्पादन नोड फ़ाइल बनाने के लिए मैं सिर्फ शीर्ष परनोड फाइलों में आम तौर पर टाइपप्रति

#!/usr/bin/env node 

रख दिया और यह है कि एक पार्टी टर्मिनल से चलाया जा सकता है एक फ़ाइल बनाने के लिए निष्पादन योग्य बनाते हैं। हालांकि अगर मैं इसे टाइपस्क्रिप्ट फ़ाइल में करता हूं, तो कंपाइलर "त्रुटि टीएस 1001: अप्रत्याशित चरित्र" # "" कहता है और इसे संकलित करने से इंकार कर देता है। तो मैं टाइपस्क्रिप्ट के साथ एक खोल निष्पादन योग्य नोड फ़ाइल कैसे बना सकता हूं?

+0

जेएस में निष्पादन योग्य लिखें और बस अपनी टाइपस्क्रिप्ट फ़ाइल की आवश्यकता है। – jgillich

+0

यह एक समाधान के आसपास एक काम है। अगर मैं टाइपस्क्रिप्ट में कमांड लाइन तर्कों को संसाधित करना चाहता हूं तो क्या होगा? –

+0

शेबांग मानते हैं कि लक्षित दुभाषिया '#' का उपयोग अपने टिप्पणी चरित्र के रूप में करता है, ताकि शेबैंग को अनदेखा कर दिया जा सके। आपके पास अतिरिक्त जटिलता है कि टाइपस्क्रिप्ट दुभाषिया नहीं है; आप पहले इसे जावास्क्रिप्ट में संकलित करते हैं, फिर परिणाम की व्याख्या करें। – chepner

उत्तर

8

आप माइक्रोसॉफ्ट को बग की रिपोर्ट करने का अधिकार रखते थे, और वे इसे wontfix के रूप में बंद करने में गलत थे।

जब तक यह तय है, तो यहां एक कार्यवाही है। एक पाठ फ़ाइल में निम्न चिपकाएं और shebangify के रूप में सहेज:

#!/usr/bin/env node 
var fs = require('fs'); 
var path = process.argv[2]; 
var data = "#!/usr/bin/env node\n\n"; 
data += fs.readFileSync(path); 
fs.writeFileSync(path, data); 

(एनबी इस जवाब संक्षिप्त रखने के लिए, कोड के ऊपर किसी भी त्रुटि-जांच या अन्य शोधन नहीं है, तो अपने जोखिम पर उपयोग करें या का उपयोग this बजाय इसके अलावा, this SO question फ़ाइलों को prepending के बारे में अधिक जानकारी के लिए देखें)

साथ फ़ाइल निष्पादन योग्य बनाने फ़ाइल की निर्देशिका नेविगेट करने के लिए एक टर्मिनल का उपयोग करने और क्रियान्वित करते हुए:।।

$ chmod +x shebangify 

एक बार जब आप रचनात्मक है एक टाइपस्क्रिप्ट प्रोग्राम (उदा।

$ tsc --out myscript myscript.ts ; ./shebangify myscript ; chmod +x myscript 
+0

यह स्रोत मानचित्रों के साथ अच्छी तरह से खेल नहीं है। – chocolateboy

+0

@chocolateboy मैंने पहले स्रोत मानचित्र का उपयोग नहीं किया है। उन्हें देखने के लिए मुझे प्रेरित करने के लिए धन्यवाद! मुझे यकीन नहीं है कि बहुत से लोग अपनी शेल स्क्रिप्ट को कम करते हैं, भले ही वे node.js का उपयोग कर रहे हों, लेकिन मुझे गलत तरीके से गलत किया जा सकता है। शायद ऐसा करने से प्रदर्शन में सुधार होता है? किसी भी तरह, यदि आपके पास प्रश्नकर्ता की समस्या का हल है जो * * * स्रोत मानचित्रों के साथ अच्छी तरह से खेलता है, तो कृपया इसे उत्तर के रूप में पोस्ट करें, या मेरा उचित संपादन सुझाव दें :) अद्यतन: नीचे दी गई टिप्पणी को देखें कि शेबैंग समर्थन [ जोड़ा] (https://github.com/Microsoft/TypeScript/pull/4120)। हुर्रे! – sampablokuper

1

मैं काफी प्रतिष्ठा अंक पोस्ट करने के लिए की जरूरत नहीं है: myscript.ts) कहा जाता है कि आप संकलन और (जैसे myscript कहा जाता है) एक खोल स्क्रिप्ट में बदल करना चाहते हैं, अपने टर्मिनल में इन पंक्तियों के साथ एक दृश्य को क्रियान्वित करते हुए ऐसा करने के एक टिप्पणी, लेकिन मैंने सोचा था कि हर किसी के लिए यह जानना अच्छा होगा कि मैंने गिटहब पर एक नया मुद्दा खोला है क्योंकि टाइपस्क्रिप्ट देव इस तरह की चीजों को ट्रैक करने के लिए उपयोग कर रहे हैं: https://github.com/Microsoft/TypeScript/issues/2749

+3

शेबैंग समर्थन [जोड़ा गया] [https://github.com/Microsoft/TypeScript/issues/4120) और टाइपस्क्रिप्ट 1.6 में उपलब्ध होगा। इस बीच, इसका परीक्षण 'npm install -g टाइपस्क्रिप्ट @ अगली' के साथ किया जा सकता है। – chocolateboy

+0

@ चॉकलेटबॉय, यह उत्कृष्ट खबर है! – sampablokuper

+0

@chocolateboy साझा करने के लिए धन्यवाद! – Jonathan

5

उदाहरण के लिए https://github.com/Microsoft/TypeScript/blob/master/bin/tsc देखें। मूल रूप से .js एक्सटेंशन के बिना एक डमी फ़ाइल है और केवल वास्तविक .js फ़ाइल की आवश्यकता है।

उदा। फ़ाइल में tsc:

#!/usr/bin/env node 
require('./tsc.js') 
संबंधित मुद्दे