web-dev-qa-db-ja.com

NodeJSのモジュールからのアプリベースパス

NodeJSでWebアプリを構築しており、APIルートを個別のモジュールに実装しています。私のルートの1つでは、いくつかのファイル操作を行っており、ベースアプリのパスを知る必要があります。 __dirnameを使用すると、もちろん私のモジュールを格納するディレクトリが提供されます。

現在、これを使用してベースアプリのパスを取得しています(ベースパスからモジュールへの相対パスがわかっている場合)。

path.join(__dirname, "../../", myfilename)

../../を使用するよりも良い方法はありますか?私はWindowsでNodeを実行しているので、process.env.PWDはありません。とにかくプラットフォーム固有になりたくありません。

29
Clint Powell

___dirname_ を使用するアプローチが最も信頼できるアプローチです。それは常に正しいディレクトリを提供します。 path.join() が面倒を見るので、Windows環境で_../../_を心配する必要はありません。

ただし、代替ソリューションがあります。 process.cwd() を使用して、プロセスの現在の作業ディレクトリを返すことができます。ベースアプリケーションディレクトリからノードアプリケーションを実行すると、このコマンドは正常に機能します。ただし、ノードアプリケーションを別のディレクトリ、たとえばその親ディレクトリ(たとえば、_node yourapp\index.js)_)から実行すると、___dirname_メカニズムがはるかにうまく機能します。

それが役立つことを願っています。

22
Tom

引数なしで path.resolve() を使用して、通常はベースアプリパスである作業ディレクトリを取得できます。引数が相対パスの場合、現在の作業ディレクトリに相対的であると想定されるため、次のように記述できます。

require(path.resolve(myfilename));

アプリのルートでモジュールを要求します。

3
Samuli Asmala

App.jsのようにグローバル変数を定義できます。

global.__basedir = __dirname;

その後、このグローバル変数をどこでも使用できます。そのように:

var base_path = __basedir
0