NodeJSでWebアプリを構築しており、APIルートを個別のモジュールに実装しています。私のルートの1つでは、いくつかのファイル操作を行っており、ベースアプリのパスを知る必要があります。 __dirname
を使用すると、もちろん私のモジュールを格納するディレクトリが提供されます。
現在、これを使用してベースアプリのパスを取得しています(ベースパスからモジュールへの相対パスがわかっている場合)。
path.join(__dirname, "../../", myfilename)
../../
を使用するよりも良い方法はありますか?私はWindowsでNodeを実行しているので、process.env.PWD
はありません。とにかくプラットフォーム固有になりたくありません。
___dirname
_ を使用するアプローチが最も信頼できるアプローチです。それは常に正しいディレクトリを提供します。 path.join()
が面倒を見るので、Windows環境で_../../
_を心配する必要はありません。
ただし、代替ソリューションがあります。 process.cwd()
を使用して、プロセスの現在の作業ディレクトリを返すことができます。ベースアプリケーションディレクトリからノードアプリケーションを実行すると、このコマンドは正常に機能します。ただし、ノードアプリケーションを別のディレクトリ、たとえばその親ディレクトリ(たとえば、_node yourapp\index.js)
_)から実行すると、___dirname
_メカニズムがはるかにうまく機能します。
それが役立つことを願っています。
引数なしで path.resolve() を使用して、通常はベースアプリパスである作業ディレクトリを取得できます。引数が相対パスの場合、現在の作業ディレクトリに相対的であると想定されるため、次のように記述できます。
require(path.resolve(myfilename));
アプリのルートでモジュールを要求します。
App.jsのようにグローバル変数を定義できます。
global.__basedir = __dirname;
その後、このグローバル変数をどこでも使用できます。そのように:
var base_path = __basedir