147

ノードコマンドラインインターフェイスを作成しています。グローバルにインストールされ、binファイルを使用して実行されます。

作業中のファイルのルートディレクトリでコマンドウィンドウを開いてからコマンドを実行する予定ですprocess.cwd()が、ノードパッケージのディレクトリを返すため、現在の作業ディレクトリを特定できませんでした。私は当初、コードがラッパーとしてバッチファイルを使用して実行されているため(つまり、最初にノードなしでbinファイルを実行できる方法)、それは不可能であると想定していましたが、coffee-scriptはそれを実行できます。私はコーヒースクリプトのソースを調べましたが、それをたどることができませんでした(十分な経験がありませんでした)。

自分でテストするには、次のpackage.jsonファイルを使用してパッケージを作成します。

{
  "name": "test-package",
  "version": "1.0.0",
  "bin": {
    "test-package":  "./bin/test-package"
  },
  "main": "/lib/test"
}

bin内のこのテストパッケージファイル:

#!/usr/bin/env node

var path = require('path');
var fs   = require('fs');
var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');

require(lib + '/test');

誰かがこれに光を当てることができますか?

次に、lib/test内のコマンドラインディレクトリを取得してみてください。

4

5 に答える 5

226
  • process.cwd()アプリケーション内の「process.chdir」によって変更されていない場合、コマンドが実行されたディレクトリ (ノード パッケージのディレクトリではない) を返します。
  • __filename配置されているファイルへの絶対パスを返します。
  • __dirnameのディレクトリへの絶対パスを返します__filename

モジュール ディレクトリからファイルをロードする必要がある場合は、相対パスを使用する必要があります。

require('../lib/test');

それ以外の

var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');

require(lib + '/test');

呼び出し元のファイルに対して常に相対的であり、現在の作業ディレクトリには依存しません。

于 2012-09-02T20:55:03.743 に答える
3

または、現在の NodeJS スクリプトの現在のディレクトリのみを取得する場合は、次のような簡単なことを試すことができます。これは Node CLI 自体では機能しないことに注意してください。

var fs = require('fs'),
    path = require('path');

var dirString = path.dirname(fs.realpathSync(__filename));

// output example: "/Users/jb/workspace/abtest"
console.log('directory to start walking...', dirString);
于 2014-03-18T22:28:13.437 に答える