web-dev-qa-db-ja.com

process.env.PWDとprocess.cwd()

Meteor JSを使用しています...そしてMeteorアプリ内で、ノードを使用してアプリ内のさまざまなディレクトリのコンテンツをクエリしています...

Process.env.PWDを使用してフォルダーの内容を照会すると、process.cwd()を使用してフォルダーの結果を照会した場合とは異なる結果が得られます。

var dirServer = process.env.PWD + '/server/';
var dirServerFiles = fs.readdirSync(dirServer);
console.log(dirServerFiles); //outputs: [ 'ephe', 'fixstars.cat', 'sepl_30.se1', 'server.js' ]

vs

var serverFolderFilesDir = process.cwd() +"/app/server";
var serverFolderFiles = fs.readdirSync(serverFolderFilesDir);
console.log(serverFolderFiles); //outputs: [ 'server.js' ]

process.cwd()を使用すると、Meteor内の「server.js」のみが表示されます。

どうしてこれなの? process.cwd()はprocess.env.PWDとどのように異なりますか?

10
preston

それらは関連していますが、同じものではありません。

_process.env.PWD_は、プロセスが開始されたのときの作業ディレクトリです。これは、プロセス全体で同じです。

process.cwd()current作業ディレクトリです。 process.chdir()を介して行われた変更を反映します。

PWDを操作することは可能ですが、操作しても意味がありません。その変数は何も使用されておらず、便宜上そこにあります。

パスを計算する場合は、おそらく次のようにします。

_var path = require('path');
path.resolve(__dirname, 'app/server')
_

ここで、___dirname_は、このコードが定義されているソースファイルが存在するディレクトリを反映しています。 cwd()がその近くにあると期待するのは誤りです。サーバープロセスがメインのソースディレクトリ以外から起動された場合、cwd()を使用すると、すべてのパスが正しくなくなります。

15
tadman