Node.js ファイルパス

システム内のすべてのファイルにはパスがあります。Linux と macOS では、パスは /users/joe/file.txt のように見える場合があります。一方、Windows コンピュータは異なり、C:\users\joe\file.txt などの構造になっています。

アプリケーションでパスを使用する際には注意が必要です。この違いを考慮する必要があります。

このモジュールは、`const path = require('node:path');` を使用してファイルに含めることができ、そのメソッドを使用できます。

パスからの情報の取得

パスが与えられると、これらのメソッドを使用してパスから情報を抽出できます。

  • dirname: ファイルの親フォルダを取得します。
  • basename: ファイル名部分を取得します。
  • extname: ファイル拡張子を取得します。

const path = require('node:path');

const notes = '/users/joe/notes.txt';

path.dirname(notes); // /users/joe
path.basename(notes); // notes.txt
path.extname(notes); // .txt

basenameに第二引数を指定することで、拡張子を除いたファイル名を取得できます。

path.basename(notes, path.extname(notes)); // notes

パス操作

path.join() を使用して、パスの2つ以上の部分を結合できます。

const name = 'joe';
path.join('/', 'users', name, 'notes.txt'); // '/users/joe/notes.txt'

path.resolve() を使用して、相対パスの絶対パス計算を取得できます。

path.resolve('joe.txt'); // '/Users/joe/joe.txt' if run from my home folder

この場合、Node.js は現在の作業ディレクトリに /joe.txt を追加するだけです。第二パラメータとしてフォルダを指定すると、resolve は最初のものを第二のパラメータのベースとして使用します。

path.resolve('tmp', 'joe.txt'); // '/Users/joe/tmp/joe.txt' if run from my home folder

最初の引数がスラッシュで始まる場合、それは絶対パスであることを意味します。

path.resolve('/etc', 'joe.txt'); // '/etc/joe.txt'

path.normalize() は別の便利な関数で、...、または二重スラッシュなどの相対指定子を含む場合に、実際のパスの計算を試みます。

path.normalize('/users/joe/..//test.txt'); // '/users/test.txt'

resolve と normalize はどちらも、パスが存在するかどうかをチェックしません。単に、受け取った情報に基づいてパスを計算するだけです。