2016-10-13 4 views
5

मैं Node.js. के साथ उपयोग करते समय टाइपस्क्रिप्ट को एक फ़ाइल में संकलित करना चाहता हूं।मैं अपने टाइपस्क्रिप्ट कोड को Node.js के लिए एक फ़ाइल में कैसे संकलित करूं?

मैं इस तरह "tsconfig.json" विन्यस्त करने की कोशिश की है:

"compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
    "noImplicitAny": false, 
    "sourceMap": false, 
    "outFile": "./app/index.js", 
    "pretty": true, 
    "types": [ 
     "node" 
    ] 
    }", 

... लेकिन जब मैं module" set to "commonjs" के साथ `कोशिश, मैं त्रुटि मिलती है:

error TS6082: Only 'amd' and 'system' modules are supported alongside --outFile. 

हैं मैं इसे "module": "system" को बदलने के लिए, जब node में फ़ाइल चल मैं इस त्रुटि मिलती है:

ReferenceError: System is not defined 

अगर मैं module"amd" को बदलने के लिए, मैं जब node में फ़ाइल चल रहा यह त्रुटि प्राप्त:

ReferenceError: define is not defined 

उत्तर

11

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

सिस्टमजेएस जैसे अन्य मॉड्यूल सिस्टम में यह सीमा नहीं है, और मॉड्यूल परिभाषाओं को केवल टाइपस्क्रिप्ट कंपाइलर का उपयोग करके एक फ़ाइल में जोड़ा जा सकता है: tsc ... --outfile bundle.js -module system। हालांकि, वे फ्लाई पर नोड.जेएस द्वारा समर्थित नहीं हैं।

वास्तविक समाधान के लिए, दो उचित विकल्प हैं: या तो अपने प्रोजेक्ट को एक अलग उपकरण (ब्राउज़र, वेबपैक, ...) का उपयोग करके समाधान को बंडल करने के लिए कॉन्फ़िगर करें, या SystemJS को अपने Node.js एप्लिकेशन में कार्यान्वित करना शामिल करें (निर्देश here)।

मैं एक साइड नोट के साथ भी समाप्त होगा: सर्वर-पक्षीय कोड को बंडल करने में शायद ही कोई लाभ नहीं है। बंडलिंग आमतौर पर क्लाइंट-पक्षीय संसाधनों के आकार को कम करने के लिए फ्रंटेंड परियोजनाओं में किया जाता है।

+0

अच्छा जवाब, धन्यवाद, यह सुनिश्चित नहीं है कि यह कभी क्यों नहीं छोड़ा गया था ... @ user236582 कृपया अच्छे उत्तरों की उपेक्षा न करें –

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