azukiazusa

azukiazusa

Node.js esm の dirname と filename

commonjs では __dirname__filename でファイルのパスを取得できますが ES Modules では使えません。

今まで同等の API が存在していなかったのですが、Node.js v20.11.0 で import.meta.dirnameimport.meta.filename が追加されました。

azukiazusa

azukiazusa

今までの ES Modules ではディレクトリ名を取得するために以下のようなコードを書いていました。

import url from "url";
import path from "path";
const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
azukiazusa

azukiazusa

これからは import.meta.dirname でディレクトリ名を取得できます。

const __dirname = import.meta.dirname;
azukiazusa

azukiazusa

CommonJS から ES Modules に移行する際には、__dirname__filenameimport.meta.dirnameimport.meta.filename に置き換えるだけで移行できるようになります。よく遭遇する問題だったので嬉しいですね。