__dirname & __filename equivalent in Bun


The Bun documentation lists the available globals. This includes the globals __dirname and __filename, popularized by Node. While these work in Bun, they are not the preferred approach because, according to Jarred Sumner (the creator of Bun) “the types will usually get mad about __dirname”.

Instead we can use import.meta. import.meta is a standard implemented in Node, Deno, Bun and browsers. import.meta is extended by Bun. Jarred Sumner has said “import.meta is host-defined (by the spec) so we are “allowed” to extend it”. If you look on the MDN page for import.meta you won’t find the following information as it is unique to Bun, and the following code won’t work in Deno, Node or web browsers.

Get the directory of the current module:

const dir = import.meta.dir;

The dir variable would be something like /Users/olliew/code/mybunproject

Get the name of the current module:

const file = import.meta.file;

file variable would be something like index.js

Get the path of the current module:

const path = import.meta.path;

The path variable would be something like /Users/olliew/code/mybunproject/index.js