Node.js の ES modules で __dirname や __filename を使う
Created on
CommonJS では、__filename や __dirname 変数をよく使う。それぞれ現在のファイルのフルパス、現在のファイルがあるディレクトリを表す。
しかし、ES modules ではそれらが使えない。
Node.js v21.2.0 からはそれらの代わりとして import.meta.dirname, import.meta.filename が使える。
const __dirname = import.meta.dirname;
const __filename = import.meta.filename;それより前の Node.js では node:url モジュールの fileURLToPath() に import.meta.url を渡して __filename を取得する。
その __filename を node:path モジュールの dirname() に渡すことで __dirname を取得できる。
import { fileURLToPath } from 'node:url';
import path from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);import.meta.url は、該当のモジュールの file: URL を表す。これを fileURLToPath() に渡してパスに変換している。
path.dirname() はパス文字列を受け取り、そのパスのディレクトリ名を返す。
参考