Node.jsのpath.normalizeとpath.resolveの違い


86

差(もしあれば)何であるpath.normalize(your_path)とはpath.resolve(your_path)

path.resolve(...)複数の引数を受け入れることができることは知っていますが、単一の引数を使用した動作は呼び出しと同じpath.normalize()ですか?

編集:それらが同じように動作することになっている場合path.normalize(...)、パスを単純に渡すことができるときに関数を公​​開する目的がわかりません。path.resolve(...)または、おそらく、ドキュメント化の目的です。たとえば、彼らは次のドキュメントでpath.resolve(...)次のように述べています。

...結果のパスは正規化され、...

を公​​開path.normalize(...)すると、「正規化」の意味を簡単に説明できますか?私は知らないよ。

回答:


182

path.normalize余分を取り除く...パスに、など。path.resolveパスを絶対パスに解決します。例(私の現在の作業ディレクトリは/Users/mtilley/src/testing):

> path.normalize('../../src/../src/node')
'../../src/node'
> path.resolve('../../src/../src/node')
'/Users/mtilley/src/node'

つまり、path.normalize「入力と同じ場所path.resolveに到達するための最短経路は何ですか」であり、「この経路をたどった場合の目的地は何ですか」です。

ただし、それpath.normalize()多くのことに注意してくださいpath.resolve()。よりもコンテキストに依存し。持っていたpath.normalize()して、コンテキスト・デ・ペンダント(すなわち、それは考慮に入れ、現在の作業ディレクトリを取っていた場合)してきたでしょう上の例では、結果を../nodeそのから取ることができる最短経路1だから、/Users/mtilley/src/testingとは/Users/mtilley/src/node

皮肉なことに、これはpath.resolve()絶対的な用語で相対パスを生成することを意味します(どこでも実行でき、同じ結果が得られます)が、path.normalize()相対的な用語で絶対パスを生成します(目的のパスで実行する必要があります)絶対結果を計算します)。


いいね。答えてくれてありがとう!これはしばらくの間私を悩ませてきました。Nodeのドキュメントは、通常は非常に優れていますが、これについては少し戸惑いました。
BMiner 2012年

14
また、path.normalizeは、正規化する可能性のあるすべてのパスを処理でき、パスの文字列操作のみを意味しますが、path.resolveは、ファイルシステムと現在のディレクトリを使用してパスを絶対パスに解決します。これにより、path.normalizeがtarファイル内のパス、リモートファイルシステム、または完全に抽象的なもので使用される可能性があるため、動作が大きく異なります。
Nakedible 2014年

それらはpath.joinとどう違うのですか?
Vijey 2017年

2

ドキュメントから:

解決を考える別の方法は、シェル内の一連のcdコマンドです。

ドキュメント内のpath.resolveおよびpath.normalizeへのリンク。私はほとんどの場合、回答にリンクを提供したくありませんが、Node.jsのドキュメントは非常に適切です。


パスをpath.resolve(...)に渡すだけで、normalize(...)関数を公開する目的が理解できないと思います
BMiner 2012年

6
正規化するパスは、実際にはファイルシステムに存在しない可能性があります。たとえば、作成するファイルへのパスを正規化する場合や、相対URLパスを正規化する場合があります。
lanzz 2012年

実際、なぜ正規化オーバーリゾルブを使用するのかわかりません。
Pickels 2012年

1
normalizeは、絶対パスへのパスを完了しません。したがって、別のリソースと比較して一部のリソースの正常なパスを取得するために使用できます。これは、HTML内で使用して、たとえばユーザーが選択したファイルを参照できます。正規化されたパスは常に単純であるため(余分な../ものはありません)、ユーザーが特定の場所からファイルを選択するだけで、この場所以外のプライベートファイルを表示する機会がないことを簡単に確認できます。
dronus 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.