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 /'