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となる場合がある)
コメント