path.resolve()の使い方

path.join()

文字列を”/”ないし”\”で結合して、”../”などを正規化する。
単純結合に近い。正規化されるので引数の”/”の有無は影響がない。

path.join('/a', '/b', '/c');
=> /a/b/c

path.join('a', 'b', 'c');
=> /a/b/c

path.resolve()

絶対パスを返す。
引数の後ろから順に評価、結合していく。
途中で絶対パスが完成したら結合途中でも処理を抜ける。

path.resolve('/a', '/b', '/c');
=> /c

path.resolve('/a', '/b', 'c');
=> /b/c

path.resolve('/a', 'b', 'c');
=> /a/b/c

path.resolve('a', 'b', 'c');
=> current_path/a/b/c

path.resolve(__dirname, 'a', 'b', 'c');
=> current_path/a/b/c

引数の右から順位処理をしていき、”/”に当たった時点で絶対パスが作成されるため、そこで処理が終了する。つまり引数の文字列の先頭に”/”がある場合、そこまでで処理が終わる。
最後まで絶対パスができなかった場合は実行時のcurrent_pathを付けて返す。

current_pathは__dirnameと同じ場合もあるが異なる場合もある。
__dirnameはファイルがあるパスになるが、resolve()のパスはnode.js実行時のパスになるため、想定より階層が上の場合がある。(project/lib/xxx.jsでresolveした場合、project/がcurrent_pathとなる場合がある)

コメント