2015-12-27 7 views
6

Próbowałem skonfigurować projekt restytucji za pomocą maszynopisu. Po różnych próbach udało mi się stworzyć wersję roboczą za pomocą „Moduł: commonjs” w tsconfig.jsonKonfigurowanie TypeScript dla węzła przy użyciu module = system nie działa

wolałbym używać systemu - ale nie byłem w stanie ustawić go z systemjs

boot.ts

import {AppServer} from './app'; 

var _appServer = new AppServer(); 

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "ES5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false 
    }, 
    "exclude": [ 
    "node_modules" 
    ] 
} 

app.ts

/// <reference path="typings/restify/restify.d.ts" /> 
import {Server, Response, Request, createServer} from 'restify'; 

export class AppServer { 

    private server: Server; 

    constructor() { 
    this.init(); 
    } 

    init() { 
    this.server = createServer(); 
    this.server.get('/hello/:name', this.respond); 

    this.server.listen(8080,() => { 
     console.log('%s listening at %s', this.server.name, this.server.url); 
    }); 
    } 

    respond(req: Request, res: Response, next: Function) { 
    res.send('hello ' + req.params.name); 
    next(); 
    } 

} 

użyciu "module": "system" w tsconfig.json, pojawia się następujący komunikat (nawet import System = require('systemjs') w boot.ts):

➜ server git:(master) ✗ npm run server               

> [email protected] server /Users/maquh/Development/02_Backgular/server 
> node boot.js 

/Users/maquh/Development/02_Backgular/server/boot.js:1 
(function (exports, require, module, __filename, __dirname) { System.register(['./app'], function(exports_1) { 
                  ^

ReferenceError: System is not defined 
    at Object.<anonymous> (/Users/maquh/Development/02_Backgular/server/boot.js:1:63) 
    at Module._compile (module.js:425:26) 
    at Object.Module._extensions..js (module.js:432:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:313:12) 
    at Function.Module.runMain (module.js:457:10) 
    at startup (node.js:138:18) 
    at node.js:974:3 

Transpiled bagażnik .js

System.register(['./app'], function(exports_1) { 
    var app_1; 
    var _appServer; 
    return { 
     setters:[ 
      function (app_1_1) { 
       app_1 = app_1_1; 
      }], 
     execute: function() { 
      //System.import('./app.ts'). 
      _appServer = new app_1.AppServer(); 
     } 
    } 
}); 
//# sourceMappingURL=boot.js.map 

UPDATE: Próbowałem też inną alternatywną wersję boot.ts

var System = require('systemjs'); 

System.transpiler = 'ts'; 


System.import('./app.js').then(function(m) { 
    console.log(m); 
}, function(err) { 
    console.error(err); 
}); 

te prowadzi do następującego błędu:

[Error: ENOENT: no such file or directory, open '/Users/markusbellgardt/Development/02_Backgular/server/restify'] 
+1

Na czym dokładnie polega problem? Skąd wiesz, że nie jesteś w stanie? – Pablo

+0

Dodano wyjście terminalowe – Maquh

+0

wyświetlasz 'boot.ts', który nie ma linii, która wygląda na awarię z' boot.js'. czy możesz pokazać zawartość dysku (skompilowane wyjście) 'boot.js'? – Claies

Odpowiedz

2

system używa ładowarki modułu ES6 który nodejs (według mojej wiedzy) obecnie nie obsługuje, twój początkowy przypadek użycia był dokładnie tam, gdzie byłeś wyprowadzany na commonjs. Jeśli chcesz użyć rozdzielczość modułu styl ES6 obrębie węzła trzeba będzie powiedzieć węzeł jak załadować go takich jak:

https://www.npmjs.com/package/es6-module-loader

używam maszynopis w węźle w porządku, ale używam commonjs, Użyłem system w przeglądarka wcześniej i działa dobrze, gdy masz dostępne moduły ładowania ES6, takie jak SystemJs (JSPM).

Powiązane problemy