1. ホーム
  2. node.js

[解決済み] path.join と path.resolve を __dirname と比較する。

2022-03-05 17:13:10

質問

を使用した場合、何か違いがあるのでしょうか? 両方 path.joinpath.resolve__dirname Node.jsで絶対パスを解決するために?

このような使い方をする場合、どちらを優先すべきでしょうか(絶対パス解決はユースケースの90%)?

すなわち

const absolutePath = path.join(__dirname, some, dir);

vs.

const absolutePath = path.resolve(__dirname, some, dir);

どちらの方法も、パスを正規化します。

どのように解決するのですか?

関数の違いはありますが、今回の使い方は同じ結果になります。

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 . このような場合は、本当に好みの問題です。