みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Common JSの__diranameをES Moduleで使用する(ReferenceError: __dirname is not defined in ES module scope) 📁

タイトルの通りですが、ES Moduleで__diranameを使う方法です。

例えば、index.jsや、index.cjsに、

console.log(__dirname);

と記述し、

node index.js
node index.cjs

を実行すると、ディレクトリまでのパスが表示されますが、

index.mjsに、

console.log(__dirname);

と記述し、

node index.mjs

を実行すると、

ReferenceError: __dirname is not defined in ES module scope

と、エラーになります。

mjs(ES Module)にて、__dirnameを使用したい場合は、

v21.2.0以降

const __dirname = import.meta.dirname;

console.log(__dirname);

v21.1.0以前

import path from 'node:path';
import url from 'node:url';

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

console.log(__dirname);

と、自作することで、ディレクトリまでのパスを取得することができます。


関連記事

blog.kimizuka.org