2013-05-23 18 views
6

私はコマンドラインから実行できる簡単なプログラムを持っています。 このプログラムは、マークダウンファイルのライブプレビュー用です。私はノード - ウェブキットで作業ディレクトリを取得する方法

cat $NW/nw marknow.nw > marknow 

でアプリをパッケージ化し、別の場所から実行しているよ :

./build/marknow ../relative/path/to/file.md 

私は、現在の作業ディレクトリを取得することはできません。

process.cwd() 

が/ tmp/somethingを返すのですか?

node-webkitで作業ディレクトリを取得するにはどうすればよいですか? ./build/marknow ../relative/path/to/file.mdが呼ばれたディレクトリ。 CWDが動作していないようならば、あなたが試みることができる別のオプションは、このような何かを実行ディレクトリを取得している

+1

process.cwd()は、絶対パス、おそらくnode-webkitの古いバージョンだったのでしょうか? – Maslow

+0

@Maslow:その場合は、ユーザーがプロセスを開始したディレクトリ(これは通常、アプリケーションがインストールされているディレクトリとは異なる)という伝統的な用語の意味でcwdを探していなかったと思います。これを確認できますか? – LOAS

答えて

6

私はcwdは、2つの異なる意味を得ていると思いますウェブキットコミュニティ seems to be using the 1st

私が間違っている場合は私を訂正してください私はあなたが第2を探していると思う:あなたのアプリに電話をかけたときのユーザーのパス。

process.env.PWD

+1

process.env.PWDはプロジェクトを実行可能ファイルにビルドするときに利用できないようです。 – squaretone

+0

@尺度:Windowsビルドでこれを観察しましたか?私はprocess.env.PWDに私がアプリを起動したときのディレクトリのパスを含んでいたMac用のビルドを行った。 – LOAS

+0

思い出しません。私は両方で開発してきましたが、主にWindows上に構築しました。 – squaretone

13

var path = require('path'); 
var execPath = path.dirname(process.execPath); 

これはあなたのexeファイルの実行ディレクトリを取得する必要があります。 cwdは、各実行時に一時ディレクトリからファイルを開く方法をnode-webkitが処理するため、一時ディレクトリを取得します。

  1. ユーザーはシェルスクリプトI can see the 2nd meaning applied

からアプリを起動アプリは

  • ディレクトリに住んでいるディレクトリが、リンパ節転移:

  • +2

    path.dirname(process.execPath)は現在の作業ディレクトリではなく、./build/ディレクトリを指しています。 –

    +1

    scapsを避けるために 'execPath.replace(/ \\/g、"/");' –

    1

    他の回答で指摘されたように、ノード-WebKitのは間違っている「現在の作業ディレクトリ」でノード・プロセスを起動する:私は最終的に私のために働く方法を見つけたいくつかのテストの後

    (とにかくコマンドラインの観点から)。

    他のところで指摘されているように、process.env.PWDには実際に私たちが望むものが含まれています(アプリケーションがコマンドラインから起動されたとき)。簡単な回避策は、あなたのindex.html(または早期実行されますいくつかの他の場所)に次の操作を実行することができます

    <script type="text/javascript"> 
        if(process.env.PWD) { 
        process.chdir(process.env.PWD); 
        } 
    </script> 
    

    プレスト!今process.cwd()は正しいことを返します。

    明らかに、このトリックはコマンドラインから起動されたアプリでのみ有効ですが、アプリがコマンドラインから起動された場合にのみ必要になることがあります。

    は、この問題のチケットがありますが、それは、すべての答えが失敗した場合は、これを試してみてくださいold and dusty

    1

    です。

    1. "main.js"ファイルを作成し、このコードをコピーします。

      // get child_process module. 
      var childproc = require('child_process'); 
      
      // start process using child_process 
      // with current path string 
      // '__dirname' would be not only path 
      // of 'main.js' but also one of 'app.zip' 
      // because 'main.js' and 'app.zip' have same directory 
      childproc.exec('nw app.zip ' + __dirname); 
      
    2. あなたはNode.jsの

    // get 'nw.gui' module 
    var gui = require('nw.gui'); 
    
    // get arguments that we passed 
    var arr = gui.App.argv; 
    
    // nw app.zip __dirname 
    //   ^argv[0] 
    alert('current path: [' + arr[0] + ']'); 
    
  • 実行 "main.js" 現在のパスを取得したい、このコードを追加します。私は、現在入手する方法」を掲載ディレクトリ(現在のパス)を使用してnode-webkit "を作成します。

    http://hdnua.tistory.com/16

    これは、zipファイルのディレクトリを実行します。

  • 関連する問題