
Node.jsのpathモジュールとは
ファイル名、ディレクトリ名、拡張子などのパス操作ができるモジュール。
例えばtest.mjsというファイル内に「const testPath ='./foo/bar/baz.txt';」というパスがあって、これのファイル名だけ取得したい場合はJavaScriptだけだと「testPath.split('/').pop()」となるが…
const testPath = './foo/bar/baz.txt';
const fileName = testPath.split('/').pop();
console.log(fileName);
// => baz.txt
pathモジュールを使用すればpath.basename(testPath)で取得できる。
const testPath = './foo/bar/baz.txt';
console.log(`basename: ${path.basename(testPath)}`);
// => basename: baz.txt
※ pathモジュールはWindowsのバックスラッシュのパスにも対応しているので環境が変わっても使用することができる。
ほかにもディレクトリのパスを取得するdirname、拡張子を取得するextname、拡張子を除いたファイル名を取得するparse().nameなどがよく使用される。
console.log(`dirname: ${path.dirname(testPath)}`);
// => dirname: ./foo/bar
console.log(`extname: ${path.extname(testPath)}`);
// => extname: .txt
console.log(`parse().name: ${path.parse(testPath).name}`);
// => parse().name: baz

pathはパスの取得以外にも覚えておくと便利な使い方がいくつかあるので、この記事ではそれについて解説する。
path.join([…paths])
文字列を結合してパスを作成できる。
console.log(`join: ${path.join('a', 'b', 'c.txt')}`)
// => join: a/b/c.txt
console.log(`join: ${path.join(...['foo', 'bar', 'baz'])}`)
// => join: foo/bar/baz
path.isAbsolute(path)
パスが絶対パスかどうか判定する。
console.log(path.isAbsolute('/foo/bar'));
// => true
console.log(path.isAbsolute('./baz'));
// => false
path.normalize(path)
パスの余分なスラッシュの除去および「./」や「../」があるときの解消を行う。
console.log(path.normalize('./foo/bar//baz/..'));
// => foo/bar
path.sep
パスのセパレーターを返す。
Macだと「/」、Windowsだと「\」を返す。
// Macの場合
'foo/bar/baz'.split(path.sep);
// => ['foo', 'bar', 'baz']
// Windowsの場合
'foo\\bar\\baz'.split(path.sep);
// => ['foo', 'bar', 'baz']