タイトルの通りですが、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);
と、自作することで、ディレクトリまでのパスを取得することができます。