2017-02-27 13 views
8

द्वारा उत्पन्न दायर में परिभाषित नहीं किया गया है, मैं इलेक्ट्रॉन विकास के लिए टाइपस्क्रिप्ट के साथ शुरू करने की कोशिश कर रहा हूं। नोड और jquery के लिए टाइपिंग के साथ कुश्ती के बाद, मैं अंततः मेरी .ts फ़ाइल त्रुटि मुक्त हो गया।असीमित संदर्भ त्रुटि: निर्यात प्रकार

समस्या अब है कि जब मैं अपने अनुप्रयोग चलाने, मैं इस त्रुटि मिलती है:

"use strict"; 
Object.defineProperty(exports, "__esModule", { value: true }); 

मैं नहीं जानता:

index.js:2 Uncaught ReferenceError: exports is not defined 

ये index.js में पहले दो लाइनें हैं वह लाइन करता है। संकलन करते समय टाइपस्क्रिप्ट ने इसे जोड़ा। अगर मैं इसे हटा देता हूं तो मेरा ऐप ठीक काम करता है।

मैं इस त्रुटि से कैसे छुटकारा पा सकता हूं?

ओह और यहां मेरा tsconfig है, अगर यह प्रासंगिक है।

{ 
    "compilerOptions": { 
     "target": "es6", 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "isolatedModules": false, 
     "jsx": "react", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "declaration": false, 
     "noImplicitAny": false, 
     "noImplicitUseStrict": false, 
     "removeComments": true, 
     "noLib": false, 
     "preserveConstEnums": true, 
     "suppressImplicitAnyIndexErrors": true 
    }, 
    "exclude": [ 
     "node_modules", 
     "typings/browser", 
     "typings/browser.d.ts" 
    ], 
    "compileOnSave": true, 
    "buildOnSave": false, 
    "atom": { 
     "rewriteTsconfig": false 
    } 
} 

उत्तर

7

टाइपस्क्रिप्ट 2.2.1 के नए संस्करण के साथ कोई समस्या है, पुराने संस्करण 2.1.6 का उपयोग करने का प्रयास करें, जिसने आपके लिए मेरे पास एक ही समस्या हल की है।

संकलन पर संस्करण 2.2.1 इस पंक्ति को Object.defineProperty(exports, "__esModule", { value: true }); जोड़ता है जबकि पुराना 2.1.6 नहीं होता है।

+0

यह काम किया! मेरे जैसे एटम और टाइपस्क्रिप्ट पैकेज का उपयोग करने वाले किसी के लिए; एनपीएम के माध्यम से टाइपस्क्रिप्ट 2.1.6 डाउनलोड करें (packagename @ संस्करण)। फिर पैकेज के स्रोत में जाएं और टाइपस्क्रिप्ट फ़ोल्डर को node_modules में डाउनलोड करें जिसे आपने अभी डाउनलोड किया है। – Blargmode

+0

लेकिन क्यों लाइन गलत व्यवहार की ओर ले जाती है? –

+0

@ МалъСкрылевъ मार्कस हन के उत्तर के नीचे एक नज़र डालें: https://stackoverflow.com/a/43702240/887930 –

0

QuickFix

अपने tsconfig.json में बदलें "target": "es6""target": "es5" करने के लिए।

+7

पर काम नहीं किया गया। यह अभी भी उस लाइन को उत्पन्न करता है। – Blargmode

+0

यह काम करता है आप 'मॉड्यूल "के मान को बदलते हैं। '" es5 "' –

26

मैं एम्बेडिंग HTML में एक हैक के साथ इसे हल:

<script> var exports = {}; </script> 
<script src="index.js"></script> 

असल में, यह देने के एक वैश्विक निर्यात चर यह क्या चाहता है।

इसके साथ मेरी टाइपस्क्रिप्ट (2.3.2) जेनरेट की गई फ़ाइल (es6) भार।

+2

यह उत्तर अधिक ध्यान देने योग्य है! धन्यवाद – Kahbazi

+0

आप प्रतिभा :), इस मुद्दे को हल करने के लिए पिछले 1 सप्ताह के लिए मेरे सिर तोड़ना। –

+0

हालांकि यह काफी हैक है, लेकिन शायद यह सबसे बुद्धिमान है जिसे मैंने अभी तक देखा है। मुझे लगता है कि जब तक वे इस मुद्दे को ठीक नहीं करेंगे तब तक मैं इसका उपयोग करूँगा। –

0

मुझे टाइपस्क्रिप्ट कंपाइलर द्वारा उत्पन्न जेएस फ़ाइल के साथ एक ही समस्या थी। एक ही पंक्ति:

Object.defineProperty(exports, "__esModule", { value: true }); 

और एक ही त्रुटि:

game.js:2 Uncaught ReferenceError: exports is not defined 

मैं इस फ़ाइल में एक खेल वर्ग को परिभाषित किया गया था। मैं अपने game.ts के अंत में इस जोड़कर समस्या हल हो जाती दायर:

export = Game; 
इस के साथ

, टाइपप्रति संकलक की जगह:

साथ
Object.defineProperty(exports, "__esModule", { value: true }); 

:

module.exports = Game; 

कोई और अधिक इसके बाद मेरे लिए त्रुटि।

0

मुझे एक ही समस्या थी, मैंने अभी systemjs.config संशोधित किया है।js फ़ाइल के रूप में

नीचे उल्लेख 'NPM:': '/ node_modules /' - // इसका मान सिर्फ 'node_modules /' था और मैं '/' शुरुआत में जोड़ा

'ऐप्लिकेशन': '/ src/ऐप्स' - // इसका मान सिर्फ 'ऐप्लिकेशन' था और के रूप में अपने एप्लिकेशन फ़ोल्डर पथ अलग था तो यह तदनुसार

लोडर बदल गया है: '/ src/systemjs- कोणीय-लोडर.जेएस ' - // इसका मूल्य सिर्फ 'systemjs-angular-loader.js' था और क्योंकि इसकी स्थिति मेरे प्रोजेक्ट में अलग थी इसलिए इसे सही पथ

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