回答:
2つの関数は/、非常に異なる方法で始まるセグメントを扱います。join前の引数と連結するだけですが、resolveこれをルートディレクトリとして扱い、以前のすべてのパスを無視します- cd各引数で実行した結果と考えてください。
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
もう1つ注意すべき点は、path.resolve常に絶対URLが生成され、このパスを解決するためのベースとして作業ディレクトリを使用することです。しかし、__dirnameいずれにせよ絶対パスであるので、これはあなたの場合には関係ありません。
どちらを使用するべきかについては、答えは次のとおりです。それは、セグメントがどのよう/に動作するかによって異なります-単純に結合する必要があるのか、それとも新しいルートとして機能するのか?
他の引数がハードコードされている場合、それは実際には問題ではありません。その場合、(a)この行が将来どのように変化するか、および(b)コード内の他の場所との一貫性を考慮する必要があります。
path.join('/a', '/b', 'c')が戻りますが/a/b/c、path.resolve('/a', '/b', 'c')が戻り/b/cます。
resolve最も明確ではなく、path.cd([starting dir], [final dir])はるかに直感的だと思います。
think of it as the result of executing cd with each argument私は最終的にそれを理解して作られました。ありがとう
ファイルシステムパスのデフォルトの動作は、それを抽象化するために必要なオペレーティングシステムによって異なります。このpathモジュールは、ファイルおよびディレクトリパスを操作するためのユーティリティまたはAPIを提供します。あなたはそれをあなたのプロジェクトに含めることができます
const path = require('path');
パスモジュールの二つの異なる方法です。path.joinpath.resolve
これらのメソッドはどちらも、一連のパスまたはパスセグメントを受け入れます。
このpath.resolve()メソッドは、一連のパスまたはパスセグメントを絶対パスに解決します。
このpath.join()メソッドは、プラットフォーム固有の区切り文字を区切り文字として使用して、指定されたすべてのパスセグメントを結合し、結果のパスを正規化します。
動作をよりよく理解して区別するために、さまざまなシナリオで説明します。
1.引数または空の文字列を指定しない場合
私の場合、私のファイル名はindex.jsで、現在の作業ディレクトリはE:\MyFolder\Pjtz\node
const path = require('path');
console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname of the node process
実行中の結果は次のとおりです
λ node index.js
path.join() : .
path.resolve() : E:\MyFolder\Pjtz\node
上記の実験からの推論は、path.resolve()メソッドが絶対パスを出力することですとしてpath.join()返します。現在の作業ディレクトリまたは何も指定されていない場合は相対パスを表す
2.任意の引数として/ pathを追加します。
const path=require('path');
console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));
結果は
λ node index.js
path.join() : abc\bcd
path.resolve() : E:\bcd
この実験で見つけることができる推論は、 path.join()path.resolve()、絶対パスが構築されるまで、後続の各パスが前に付けられて、パスのシーケンスを右から左に処理しながら、入力リストをプラットフォーム固有のセパレータのみ連結するです。
path.join()各引数をOS固有の区切り文字で連結し、path.resolve()各引数をルートで解決して出力を生成します。
path.resolve()ある等価ではないと__dirname。1つ目は作業ディレクトリを返し、2つ目は現在のファイルへのパスです。
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
1)path.resolveは絶対パスを作成します。
このメソッドは、絶対パスが構築されるまで、右から左への絶対パスを作成します。
例えば:
path.resolve('/a', 'b', 'c'); // C:\a\b\c
path.resolve('/a', '/b', 'c'); // C:\b\c
path.resolve('/a', '/b', '/c'); // C:\c
絶対パスが生成されない場合、現在の作業ディレクトリを使用する方法:
例えば:
path.resolve('a', 'b', 'c'); // C:\{current_working_directory}\a\b\c
2)path.joinはすべてのパスを結合し、結果を正規化します
例えば:
path.join('/a', '/b', '/c'); // \a\b\c
path.join('/a', '/b', 'c'); // \a\b\c
path.join('/a', 'b', 'c'); // \a\b\c
path.join('a', 'b', 'c'); // \a\b\c
path.join('a','b','c')は、になるはずa\b\cです。