2017-04-20 1 views
3

Kommen aus einem Python-Hintergrund und neu zu Node.js, ich habe es überraschend schwierig gefunden, Code interaktiv mit Node.js REPL zu versuchen. Ein Schlüsselproblem, das ich konfrontiert habe, ist mit imports:ES6-Stil importiert in Node.js REPL

ES6 Stil Importe funktionieren nicht auf der Node.js REPL und ich muss CommonJS Stil importieren unter Verwendung require. Beispiel: Ich kann import rxjs an der Node-Eingabeaufforderung nicht schreiben und muss require('rxjs') verwenden. Dies macht es schwieriger, Pastenskripte in Node REPL zu kopieren, um sie schnell zu testen, und ich muss zuerst alle ES6-Stilimporte konvertieren, um Importe zu erfordern, die nicht intuitiv sind.

Gibt es eine einfache Möglichkeit, ES6-Imports von der Node.js REPL zu verwenden?

Like:

$ node
> import 'rxjs';
> import {map} from 'rxjs/operator/map';

Ich habe sogar versucht, die babel-node scheint nicht Modul importiert zu unterstützen.

Antwort

1

Ich habe Angst, dass die Antwort ist keine oder mindestens noch nicht. Wir wissen, dass dies in Zukunft unterstützt wird, aber die ES2015 import und export werden nicht als Ersatz für CommonJS require und module.exports fungieren. Dies ist einfach, weil sie nicht auf die gleiche Weise funktionieren. Weitere Informationen finden Sie unter this Node.js blog post und this SO question.

Ihre Idee der Verwendung von babel-node (die jetzt babel-cli genannt wird) war nicht so schlimm: babel implementiert eine interoperable require Funktion, die Art eines Shim ist, die entworfen Module für beide Arten System abrufen können. Leider fehlen die official website Ansprüche der Unterstützung für diese Funktionalität in der REPL:

ES6-style module-loading may not function as expected

Due to technical limitations ES6-style module-loading is not fully supported in a babel-node REPL.

Dennoch tritt dieses Problem nicht auf Produktionscode anwenden, die ohnehin nicht auf dem REPL verlassen sollten. Statt die REPL zu verwenden, können Sie erwägen, ein Skript in einem Barebone-Projekt zu schreiben babel-cli enthält, und ein Skript für die transpiled Version ausgeführt wird:

{ 
    "name": "my-test-chamber", 
    "private": true, 
    "scripts": { 
    "build": "babel src/main.js -o lib/main.js", 
    "start": "npm run build && node lib/main.js" 
    }, 
    "dev-dependencies": { 
    "babel-cli": "^6.0.0" 
    } 
} 
+0

Diese Lösung mit 'babel-cli' nicht scheint Arbeit in Prod. Ich bekomme 'SyntaxError: Unerwarteter Token-Import' in der Import-Zeile 'import 'rxjs;'. Aber das beantwortet meine Frage, ob es einen Weg gibt, ES6-Importe in REPL zu handhaben oder nicht. Ich hoffe, dass Node.js bald eine Lösung für seine zukünftigen Releases vorstellt. –

+0

@PranjalMittal Ich weiß nicht, was 'rxjs' ist, aber Sie müssen den Modulnamen zwischen Anführungszeichen setzen. Dann können Sie vielleicht alles in das Paket innerhalb eines Namespace einfügen: 'import * als rxks von 'rxks'. Trotzdem würde das nicht ausreichen, damit die REPL funktioniert. –