path.join vs path.resolve with __dirname



Path Join Vs Path Resolve With __dirname



解決:

はい、機能には違いがありますが、この場合の使用方法は同じ結果になります。

path.joinは、2つのパスをマージすることにより、正規化されたパスを返します。絶対パスを返すことはできますが、必ずしもそうとは限りません。



例えば:

path.join( 'app / libs / oauth'、 '/ .. / ssl')

に解決しますapp / libs / ssl



一方、path.resolveは絶対パスに解決されます。

たとえば、次のコマンドを実行すると、次のようになります。

path.resolve( 'bar'、 '/ foo');

返されるパスは次のようになります/ fooは、構築できる最初の絶対パスであるためです。



ただし、実行する場合:

path.resolve( '/ bar / bae'、 '/ foo'、 'test');

返されるパスは次のようになります/ foo / testは、右から左に形成できる最初の絶対パスであるため、再度テストします。

ルートディレクトリを指定するパスを指定しない場合は、resolve関数は、現在の作業ディレクトリに追加されます。したがって、作業ディレクトリが/ home / mark / project /:

path.resolve( 'test'、 'directory'、 '.. / back');

に解決します

/ home / mark / project / test / back

使用する__dirnameは、ソースファイルを含むディレクトリへの絶対パスです。使用する場合path.resolveまたはpath.join次の同じパスを指定すると、同じ結果が返されます__dirname。そのような場合、それは本当に好みの問題です。


const abstractPath = path.join(__ dirname、some、dir);

対。

const abstractPath = path.resolve(__ dirname、some、dir);

path.joinは連結します__dirnameは、の値と連結された現在のファイルのディレクトリ名です。いくつかとプラットフォーム固有の区切り文字を含むdir。

一方

path.resolveが処理します__dirname、いくつかとdir、つまり右から左に処理して先頭に追加します。

の値のいずれかがいくつかまたはdirはルートパスに対応し、前のパスは省略され、ルートと見なして残りを処理します

概念をよりよく理解するために、次のように両方をもう少し詳しく説明しましょう:-

NSpath.joinおよびpath.resolveは、nodejsによって提供されるパスモジュールの2つの異なるメソッドまたは関数です。

両方がパスのリストを受け入れますが、結果、つまりこれらのパスの処理方法に違いがあります。

path.joinは、プラットフォーム固有の区切り文字を区切り文字として使用して、指定されたすべてのパスセグメントを連結し、結果のパスを正規化します。ながらpath.resolve()は、パスのシーケンスを右から左に処理し、後続の各パスは、絶対パスが作成されるまで先頭に追加されます。

引数が指定されていない場合

次の例は、両方の概念を明確に理解するのに役立ちます。-

私のファイル名はindex.jsと現在の作業ディレクトリはE: MyFolder Pjtz node

const path = require( 'path'); console.log( 'path.join():'、path.join()); //を出力します。 console.log( 'path.resolve():'、path.resolve()); //現在のディレクトリまたは__dirnameと同等のものを出力します

結果

λnodeindex.jspath.join():。 path.resolve():E: MyFolder  Pjtz  node

path.resolve()メソッドは絶対パスを出力しますが、path.join()は。を返します。何も提供されていない場合は、現在の作業ディレクトリを表します

ルートパスが引数として渡された場合

const path = require( 'path'); console.log( 'path.join():'、path.join( 'abc'、 '/ bcd')); console.log( 'path.resolve():'、path.resolve( 'abc'、 '/ bcd'));

結果i

λnodeindex.jspath.join():abc  bcd path.resolve():E: bcd

path.join()は、入力リストをプラットフォーム固有のセパレーターとのみ連結しますが、path.resolve()は、パスのシーケンスを右から左に処理し、後続の各パスは、絶対パスが作成されるまで先頭に追加されます。


のドキュメントからpath.resolve:

結果のパスは正規化され、パスがルートディレクトリに解決されない限り、末尾のスラッシュは削除されます。

しかしpath.joinは末尾のスラッシュを保持します

そう

__dirname = '/'; path.resolve(__ dirname、 'foo /'); // '/ foo' path.join(__ dirname、 'foo /'); // '/ foo /'