7

コマンドラインから実行できる簡単なプログラムがあります。このプログラムは、マークダウン ファイルのライブ プレビュー用です。アプリをパッケージ化するとき

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

4

4 に答える 4

6

cwdは2つの異なる意味を得ていると思います:

  1. アプリが存在するディレクトリ
  2. ユーザーがアプリを起動するディレクトリ

シェルスクリプトでは、2番目の意味が適用されていることがわかりますが、node-webkitコミュニティ は1番目を使用しているようです

私が間違っている場合は修正してください。ただし、2番目を探していると思います。ユーザーがアプリを呼び出したときのパスです。

いくつかのテストの後、私は最終的に自分に合った方法を見つけました:

process.env.PWD

于 2013-12-05T23:13:42.777 に答える
1

他の回答で指摘されているように、node-webkit は間違った「現在の作業ディレクトリ」でノード プロセスを起動します (とにかくコマンド ラインの観点から)。

他の場所で指摘されているようにprocess.env.PWD、実際には必要なものが含まれています (アプリがコマンド ラインから起動された場合)。簡単な回避策は、index.html (または早期に実行される他の場所) で次のことを行うことです。

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

プレスト!現在、process.cwd() は正しいものを返します。

どうやら、このトリックは実際にはコマンド ラインから起動されたアプリでのみ機能しますが、アプリがコマンド ラインから起動された場合にのみ必要になる可能性があります。

この号のチケットはありますが、古くてほこりっぽいです

于 2015-02-01T22:38:38.247 に答える
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. 現在のパスを取得するこのコードを追加します

    // 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] + ']');
    
  3. node.jsで「main.js」を実行

「node-webkitを使って現在のディレクトリ(現在のパス)を取得する方法」を投稿しました。

http://hdnua.tistory.com/16

実行中のzipファイルのディレクトリを取得します。

于 2015-06-15T08:39:55.060 に答える