2015-12-21 25 views
5

dire che ho un foo.ts e app.ts come segue:utilizzando systemjs su node.js (e angolare 2)

foo.ts:

export interface Foo { 
    id: number; 
    label: string; 
}; 

app.ts:

import {Foo} from './foo' 
var myfoo: Foo = { "id": 1, "label": "One" }; 
console.log(JSON.stringify(myfoo)); 

Dopo la compilazione, l'esecuzione di 'node app.js' dalla riga di comando viene eseguita come previsto se utilizzo "module"="commonjs" nel mio tsconfig.json. Per quanto mi riguarda, quello che mi piacerebbe fare è usare la mia interfaccia lato client con Angular 2 e lato server con il mio lato client Foo. Inconveniente, l'avvio rapido Angular 2 che sto modellando su here vuole "module"="system" in tsconfig.json. Questa configurazione causa un errore quando si tenta di eseguire 'node app.js':

System.register([], function(exports_1) { 
^ 
ReferenceError: System is not defined` 

Ho provato seguendo le istruzioni per l'uso systemjs con nodo su github, ma a questo punto io sono solo schiacciare i tasti e potrebbe usare un certo aiuto. Come posso (a) ottenere il codice app.ts in esecuzione sul lato server usando systemjs, o alternativamente, (b) ottenere l'avvio rapido di Angular 2 con commonjs?

+0

Sei sicuro di aver incluso "system.js" nel tuo html? Controlla i tuoi strumenti di sviluppo per essere sicuro che tutti i file javascript siano caricati. –

+0

Questo è node.js sul lato server, eseguito dalla riga di comando. Il client funziona perfettamente con il system.js e il tutorial di avvio rapido Angular 2. Tranne che usando lite-server come nel tutorial, sto usando Node (+ Express) per servire le pagine (+ servizi web). Ma non riesco a far funzionare il "sistema" sul codice dattiloscritto del server che vuole condividere l'interfaccia Foo. Quello che sto cercando è un semplice esempio di nodo lato server dattiloscritto che usa "system" invece di "commonjs". – Ken

+0

Per essere chiari, tutto funziona correttamente se scrivo il lato server in ES5 e nel javascript tradizionale. Ma sto colpendo un muro cercando di condividere il codice dattiloscritto sia sul client che sul server, con tsc -p. sull'intero progetto client e server. – Ken

risposta

2

Ho intenzione di concludere con una risposta, anche se la domanda non è stata rivista. La soluzione sembra essere quella di utilizzare Gulp per compilare il comune codice dattiloscritto (come l'interfaccia Foo) in modo diverso per il client ("module" = "system") e il server ("module" = "commonjs"). Se c'è un modo per compilare il codice dattiloscritto nell'OP con "module" = "system" mi piacerebbe sapere ancora. Ma sembra essere un po 'accademico dal momento che tutti gestiscono il loro progetto con Gulp o qualcosa di simile comunque.

+0

Attualmente utilizzo lo stesso approccio. Ma il rovescio della medaglia è che gli editor come lo studio visivo segnano dozzine di errori con questo approccio. –

Problemi correlati