意外と知られていないNode.jsのpathモジュールの使い方

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
意外と知られていないNode.jsのpathモジュールの使い方

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']