2016-03-21 2 views
0
installiert

Ich bin sehr neu in diesen Knoten Sachen, so gibt es wahrscheinlich eine wirklich einfache Antwort auf diese Frage ist aber sowieso ...Knoten App behandelt entkommen Zeichen in Pfad anders behandelt als global

Ich baue eine Anwendung, die für Eingabeaufforderungen ein Dateipfad Dieser Pfad wird durch Fallenlassen einer Datei in das Terminal-Fenster geliefert, die einen Pfad gibt mit Leerzeichen wie folgt entkommen:

Users/[username]/Desktop/test\ file.txt 

ich dann jsonfile verwenden, diesen Weg zu einem Array hinzuzufügen und eine JSON Datei zu schreiben. In dieser Datei wird nun der Pfad hat die Flucht entkommen und sieht wie folgt aus:

Users/[username]/Desktop/test\\ file.txt 

Jetzt will ich von der JSON, diesen Weg zu packen und zeigen es in Finder und das ist, wo ich verloren gehen. Ich benutze mac-open, um den Pfad zu enthüllen, indem ich die -R Option übergebe und das funktioniert einwandfrei, während ich meinen Code unter Verwendung von node bin/my-code.js testen und ausführen, aber sobald ich mit npm install -g . installiere, bricht es. Die Installationsarbeiten und ich kann die App läuft (es gibt auch andere Funktionen, die gut funktionieren), aber jetzt, wenn ich versuche, den Weg zu zeigen, erhalte ich die Fehlermeldung:

{ [Error: Command failed: /bin/sh -c open -a "Finder" -R "/Users/[username]/Desktop/test\\\ file.txt" 
The file /Users/[username]/Desktop/test\\ file.txt does not exist. 
] 
    killed: false, 
    code: 1, 
    signal: null, 
    cmd: '/bin/sh -c open -a "Finder" -R "/Users/[username]/Desktop/test\\\\\\ file.txt"' } 

ich die unterschiedlichen Mengen an Fluchten in den verschiedenen bemerkt habe Pfad Referenzen in den Fehler so meine Fragen sind:

  1. Warum ist das anders, wenn ich node bin/my-code.js Test und wenn ich global installieren und auf diese Weise laufen?
  2. Gibt es eine Möglichkeit, dass ich die beiden so verhalten kann, wie ich es nicht jedes Mal installieren möchte, wenn ich meinen Code testen möchte?
  3. Gibt es eine robustere Möglichkeit zum Speichern und/oder Entkommen von Dateipfaden?

Sorry das hat ein bisschen weit verbreitet. Jeder Rat willkommen :)

+0

Sie können vermeiden, zu entkommen, einfach Dateipfad in Anführungszeichen setzen. – loadaverage

+0

@loadaverage - Ich denke, mein Problem war, dass es an zu vielen Orten entkommen konnte. '' '' Terminal''''' entkam den Leerzeichen, dann '' '' JSON'''' entkam der Escape, dann '' '' mac-open'''' entkam den entkommenen Fluchten! Am Ende hat '' '' 'mac-open'''' aus der Gleichung das Problem gelöst und ich habe ein bisschen auf dem Weg gelernt :) – popClingwrap

Antwort

0

So habe ich nicht alle Fragen beantwortet, die ich gestellt habe, aber ich habe das Problem behoben und gelernt, was ich eine wirklich wertvolle Lektion in Knotenentwicklung halte.

Beim Versuch, das Problem zu finden, öffne ich tatsächlich die Quelle mac-open und stellte dabei fest, dass ich das zusätzliche Modul überhaupt nicht verwenden musste. Die Suche der Quelle führte mich über child_process und schließlich schauen Sie in das Lesen der gesamten Mac-open-Modul für eine einfache Entlassung aus:

var exec = require("child_process").exec; 

exec("open " +assetsPath +" -R", function(err){ 
    if(err) 
     console.log(err); 
}); 

Die Esson ist hier nicht 3rd-Party-Module zu verwenden, nur weil sie da sind. In dieser Situation brauchte ich nicht die gesamte Situation, die es zu bieten versuchte, und die zusätzliche Komplexität verursachte das Problem.

Verwandte Themen