Node.jsのファイルパス

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

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

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

パスから情報を取得する

パスが与えられた場合、以下のメソッドを使用してそこから情報を抽出できます。

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

const  = ('node:path');

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

.(); // /users/joe
.(); // notes.txt
.(); // .txt

basenameに2番目の引数を指定することで、拡張子なしのファイル名を取得できます。

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

パスの操作

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

const  = 'joe';
path.join('/', 'users', , '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を追加します。2番目のパラメーターとしてフォルダを指定すると、resolveは最初のものを2番目のもののベースとして使用します。

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も、パスが存在するかどうかはチェックしません。これらは与えられた情報に基づいてパスを計算するだけです。