2016-03-21 14 views
0

これには本当に簡単な答えは、おそらくそこにあるので、私は、このノードのものに非常に新しいですが、とにかく...ノードアプリの扱いは、グローバル

私が求めるアプリを構築していますインストールしたときに異なる扱いをパスに文字をエスケープファイルパス。

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

私はその配列にこのパスを追加し、JSONファイルを書き出すjsonfileを使用します。このパスはスペースを含むパスは次のようにエスケープできますターミナルウィンドウにファイルをドロップすることによって供給されています。このファイルにパスが今エスケープはを脱出したと次のようになります。

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

今、私はJSONからそのパスを取得し、Finderでそれを明らかにしたいと私は迷うところです。私はを使用してコードを実行している間にを使用して、-Rオプションを渡してパスを明らかにしていますが、すぐに私はnpm install -g .でインストールします。作品をインストールし、私はアプリを実行することができます(正常に動作し、他の機能がある)が、今、私はエラーを取得するパスを明らかにしようとした場合:

{ [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"' } 

私は別でエスケープの様々な量に気づきました私はnode bin/my-code.js を使用してテストする場合

  1. なぜこの異なっていると私は世界的にインストールしたときにその方法を実行します。エラーのパスの参照はので、私の質問がありますか?
  2. 私のコードをテストするたびにインストールしたくないのと同じように2つの動作を同じにする方法はありますか?
  3. ファイルパスの保存および/またはエスケープに、より堅牢な方法がありますか?

残念ですが、これは少しばかりです。助言を歓迎します:)

+0

エスケープを避けることができます。ファイルパスを引用符で囲むだけです。 – loadaverage

+0

@loadaverage - 私の問題は、あまりにも多くの場所でエスケープされていたことだと思います。 '' '' '' '' '' ''が '' JSON ''がエスケープを逃げていたときにスペースを逃げていたときに '' '' '' mac-open'''がエスケープされたエスケープを脱出していました!最後に、「 '' 'mac-open''''を外して方程式を修正し、ちょっとしたことを学びました:) – popClingwrap

答えて

0

私は、私が提出したすべての質問に正確に答えなかったが、私は問題を修正し、ノード開発で本当に貴重な教訓と考えていることを学びました。

私は実際にはソースmac-openを開いているので、実際に追加のモジュールを使用する必要はありません。ソースを検索する簡単なため、全体のmac-オープンモジュールをオフに解雇についてchild_process、最終的に読みに見て私を導い:

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

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

ここessonは、彼らがあるという理由だけでサードパーティ製のモジュールを使用することではありません。このような状況では、私はそれが提供しようとしていた事態の全てを必要とせず、余分な複雑さが実際に問題を引き起こしました。

関連する問題