2015-11-02 1 views
7

Wenn Sie erstellen Vorpal Anwendung, zumindest was ich in den Dokumenten sehe, erstellt es seine eigene Shell. Zuerst geben Sie diese Shell ein und dann starten Sie die Ausführung von Befehlen. Wie folgt aus:Ist es möglich, eine Vorpal-Anwendung zu erstellen, bei der die Ausgabe des Befehls direkt an das Terminal und nicht an die eigene Shell geht?

[email protected]: quotr 
quotr$ 
quotr$ snapshot 
You triggered `snapshot`. 
quotr$ 

In dem obigen Beispiel wird die snapshot Befehl wird ausgeführt „innerhalb“ der Vorpal Shell. Die Ausgabe geht nicht direkt zum Terminal.

Was ich suche ist so etwas wie dieses:

[email protected]: quotr snapshot 
You triggered `snapshot`. 
[email protected]: 

Wie kann ich das mit Vorpal erreichen?

Antwort

11

Ja, Sie können dies mit der Methode vorpal.parse tun, die die in Vorpal übergebenen Argumente analysieren und ausführen wird.

var vorpal = require('vorpal')(); 

vorpal 
    .command('snapshot') 
    .action(function (args, cb) { 
    this.log('You triggered `snapshot`.'); 
    cb(); 
    }); 

vorpal.parse(process.argv); 

können Sie haben die App Ausfahrt nach dem Befehl einfach Ausfüllen von vorpal.show() weggelassen wird. Da keine Eingabeaufforderung vorhanden ist, erkennt Node, dass nichts mehr zu tun ist, und der Prozess wird auf natürliche Weise beendet.

+0

Der Code, den Sie gepostet haben, funktioniert, aber nicht, wie Sie sagen, weil Sie show() emittiert haben. Es funktioniert, weil Sie den Callback am Ende der Aktion nicht aufrufen konnten. Wenn Sie 'cb()' in der Aktion hinzufügen, bleiben Sie in vorpal. Wenn das Argument in der Befehlszeile anders als "snapshot" ist, bleibt es auch bei dem Code, den Sie gepostet haben, in vorpal. – Josh

+0

Ich möchte nur hinzufügen - um dies als eine Lösung zu verwenden, müssten Sie nach 'process.argv' in jedem einzelnen Befehl suchen. Es muss einen besseren Weg geben, dies zu tun. – Josh

+0

Das war nur ein Tippfehler - das sollte aufhören. Wird auschecken. – dthree

Verwandte Themen