📦
__dirname, __filename を ES Modules で使う方法
Node.js v21.2.0以上
const __dirname = import.meta.dirname;
const __filename = import.meta.filename;
次のPRでv21.2.0から追加されました。
Bun
const __dirname = import.meta.dir;
const __filename = import.meta.path;
// or
const __dirname = import.meta.dirname;
const __filename = import.meta.filename;
import.meta.file
はファイル名であり、ファイルへのパスではないので注意が必要です。
次のPRでv1.0.23からNode.jsとの互換性のため、dirname
と filename
もエイリアスとして追加されました。
個人的には、import.meta.filename
と import.meta.file
が異なることは混乱するので、互換性が必要なければ import.meta.path
を使いたいです。
Node.js v21.2.0未満 / Deno
import { fileURLToPath } from "node:url";
import path from "node:path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
次のESLintの開発者さんの記事を参照しました。
import.meta.url
は自身のモジュールへの file://
で始まるURIです。
これを fileURLToPath
でパスに変換することで __filename
を取得できます。
また、そのディレクトリ名を path.dirname
で取得することで __dirname
も取得できます。
Discussion