2012-05-30 9 views
76

path.normalize(your_path)path.resolve(your_path)の違いは何ですか?Node.jsのpath.normalizeとpath.resolveの相違

path.resolve(...)は複数の引数を受け入れることができますが、1つの引数を持つ動作はpath.normalize()と同じですか?

EDIT:彼らは同じように動作することになっている場合は、単に、多分、それは文書化のためだ、path.resolve(...)にパスを渡したりすることができたときに、私はpath.normalize(...)機能を露出させる目的を理解していません。例えば、彼らはpath.resolve(...)のドキュメントで言う:

path.normalize(...)を公開

...結果のパスは正規化され、そして...それが簡単にどのような「正規化」の手段を説明するのですか? ??私は知らないよ。ドキュメントから

答えて

164

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.normalizepath.resolve「とは何であるのに対し、「私はそれが入力と同じ場所に私を取る取ることができ、最短経路であるもの」であります私がこの道を踏み出すなら、私の目的地です。 "

+0

ニース。答えをありがとう!これはしばらく私を悩ませています。 Nodeドキュメントは、通常はかなりいいですが、私はこのことについて少し困惑していました。 – BMiner

+13

また、path.normalizeは正規化したいパスを扱うことができ、パスの文字列操作のみを扱うことができますが、path.resolveはファイルシステムと現在のディレクトリを使用してパスを絶対パスに解決します。これは、path.normalizeがtarファイル内、リモートファイルシステム上、または全く抽象的な何かのパス上で使用される可能性があるため、それらが全く異なる動作をするようにします。 – Nakedible

+0

path.joinとはどのように違いますか? – Vijey

4

:解決について考える

もう一つの方法は、シェルのCD一連のコマンドとしてです。

path.resolveおよびpath.normalizeへのリンクです。私は、ほとんどの場合、答えにリンクを提供したくないのですが、Node.jsのドキュメントは非常にまともです。

+0

パスをpath.resolve(...)に渡すだけでnormalize(...)関数を公開する目的はわかりません。 – BMiner

+6

正規化するパスは実際には存在しないかもしれません。ファイルシステム、例えば作成しようとしているファイルへのパスを正規化している場合や、相対URLパスを正規化している場合があります。 – lanzz

+0

実際に私は解決の上で正規化を使用する理由はわかりません。 – Pickels