node.js - är det möjligt att ha flera moduler definierade i tsconfig?


Okej, så jag gör en Angular2-app med en Node-server. Jag har följt 5-minutersguiden så jag använder "system" som modulsystem. Men jag använder en enkel Node Express-server istället för det sätt de har i guiden. Jag skriver detta i TypeScript också, men det kompileras även till "system"-stil för att importera moduler. Och när jag kör servern får jag System is not defined.

  • Hur fixar jag så att System är definierat när jag startar servern?
  • Är det inte rekommenderat att använda "system" som kompilatoralternativet "module" i tsconfig-filen när man skriver en Node-server?
  • Kan jag kompilera serverkoden med t.ex. "commonjs" och Angular-frontend med "system"?
  • Hur gör jag konfigurationen av moduluppladdning (det lilla skriptet de har i index.html) om jag inte heller skulle använda "system" i frontenden?

Svar #1

Jag skulle rekommendera att dela upp front-end och back-end applikationer i olika projekt och låta dem kommunicera genom en REST-tjänst. Jag menar att serverapplikationen kommer att tillhandahålla tjänsten och frontapplikationen kommer att använda den med AJAX.

På detta sätt kommer du vara säker på att det inte blir någon konflikt mellan de verktyg du använder. Till exempel användningen eller inte av SystemJS. Du kommer vara fri att använda SystemJS i Angular2-applikationen som beskrivs i 5-minuterstutorialen på angular.io-webbplatsen och commonjs för Node/Express-applikationen.

Följande artikel beskriver hur man gör det:

  • Angular2 TypeScript Gulp och ExpressJS - http://blog.edenmsg.com/angular2-typescript-gulp-and-expressjs/

Svar #2

Som @Thierry Templier föreslog, behöver du dela upp din kod i /client och /server för att vara mer underhållbar och strukturerad, om du inte har gjort det ännu.

Du kan skapa två tsconfig.json-filer, sätt en i /server och den andra i /client-mappen.

  • /server

    • tsconfig.json (med module: commonjs)
  • /client

    • tsconfig.json (med module: systemjs)

När du anropar tsc från skalet använder du --project-kommandot:

tsc -p ./server <-- /server/tsconfig.json is loaded
tsc -p ./client <-- /client/tsconfig.json is loaded