2017-02-05 6 views
5

के साथ टाइपस्क्रिप्ट-संकलित मॉड्यूल आयात करने में त्रुटि मैं हाल ही में टाइपस्क्रिप्ट द्वारा संकलित मॉड्यूल आयात करने के लिए system.js का उपयोग करना सीख रहा हूं। मॉड्यूल पहले require.js के लिए संकलित किए गए थे, और ठीक काम करता है।System.js

हालांकि, system.js में विलय करते समय, मॉड्यूल को सिस्टम-production.js लागू करते समय आयात नहीं किया जा सकता है। कंसोल कहता है

Uncaught (in promise) Error: Module instantiation did not call an anonymous or correctly named System.register. 
    Instantiating https://www.star.com/libs/js/klondike.js 
    Loading ./libs/js/klondike.js 
    at register-loader.js:203 
t   @ common.js:83 
(anonymous) @ loader-polyfill.js:70 

मुझे समझ में नहीं आता कि त्रुटि संदेश का कारण क्या है। और जब मैं system.src.js लागू करता हूं, तो त्रुटि संदेश नहीं होगा, लेकिन मैं आयातित मॉड्यूल में फ़ंक्शंस का उपयोग नहीं कर सकता। कोई भी कॉल अपरिभाषित वापस आ जाएगी। तो क्या मैंने गलत तरीके से काम किया?

नीचे स्रोत कोड है।

test.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
</body> 

<!-- sys import --> 
<script src="libs/js/system-production.js"></script> 

<!--<script src="libs/js/system.src.js"></script>--> 

<script> 
    System.import("./libs/js/klondike.js"); 
</script> 

</html> 

tsconfig.json

{ 
    "compilerOptions": { 
    "module": "System", 
    "outFile": "../../js/klondike.js", 
    "target": "es5", 
    "sourceMap": true, 
    "removeComments": true 
    }, 
    "include": [ 
    "./*" 
    ] 
} 

मुख्य मॉड्यूल: CardMoves.ts

//sys import 
import * as DBJSN from "./debugJson"; 
import PokerCard from "./Cards"; 

let suits: string[] = ["spade", "heart", "club", "diamond"]; 
let cards: string[] = [, "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]; 

//sys export 
export function createDeck() { 
    let playCards: PokerCard[] = new Array(DBJSN.settings.decks*52); 

    console.log(playCards); 

    for (let i=0; i<playCards.length; i++) { 
     playCards[i] = new PokerCard(); 
     playCards[i].suit = suits[Math.floor(i % 52/13)]; 
     playCards[i].card = i % 52 % 13 + 1; 
    } 

    return playCards; 
} 

Dependency1: Cards.ts

//sys export 
export default class PokerCard { 
    private _suit: string; 
    private _card: number; 

    constructor() {} 

    //Suit getter and setter 
    get suit(): string { 
     return this._suit; 
    } 

    set suit(newSuit: string) { 
     try { 
      if (this._suit === undefined) 
       this._suit = newSuit; 
      else 
       throw "Suit value has been set."; 
     } 
     catch(e) { 
      console.log(e); 
     } 
    } 

    //Card getter and setter 
    get card(): number { 
     return this._card; 
    } 

    set card(newCard: number) { 
     try { 
      if (this._card === undefined) 
       this._card = newCard; 
      else 
       throw "Card value has been set."; 
     } 
     catch(e) { 
      console.log(e); 
     } 
    } 
} 

Dependency2: debugJson.ts

//sys export 
export let settings = { 
    decks: 1, 
    cardsPerClick: 1, 
    timer: true 
}; 

उत्तर

2

मैं एक ही मुद्दा था। समस्या यह थी कि मैंने नियमित मॉड्यूल के रूप में बंडल का उपयोग करने की कोशिश की। प्रलेखन बंडल के अनुसार कई सिस्टम.रेजिस्टर कॉल होना चाहिए। फिर आपको इस बंडल को स्क्रिप्ट टैग के माध्यम से नियमित जेएस फ़ाइल के रूप में जोड़ना होगा। और उसके बाद आपका प्रारंभ बिंदु मॉड्यूल (आपके मामले में createDeck मुझे लगता है)।

अधिक जानकारी के लिए कृपया https://github.com/systemjs/systemjs/blob/master/docs/production-workflows.md का पालन करें।

आशा है कि इससे मदद मिलती है!

+0

क्या यह समस्या हल हो गई थी? मेरी भी यही समस्या है। प्रलेखन संकलक कंपाइलर का उपयोग करके बंडल किए गए जेएस फ़ाइलों का उपयोग करने के तरीके पर बहुत अस्पष्ट है। – Kokodoko

+0

एक स्क्रिप्ट टैग के माध्यम से बंडल सहित मेरे लिए चाल थी। –

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