[Node.js](https://nodejs.org) + [Gjs](https://gjs.guide/) + [Deno](https://deno.land/) module that returns the current script dirname and filename. Similar to `__dirname` and `__filename` but also works in CommonJs and ES modules.
npm install cross-dirnameNode.js + Gjs + Deno module that returns the current script dirname and filename. Similar to __dirname and __filename but also works in CommonJs and ES modules.
On Node.js and GJS you can install the package as with NPM:
```
npm install cross-dirname --save
On Deno you just need to import this package:
`ts`
import { getDirname, getFilename } from 'https://deno.land/x/cross_dirname/mod.ts';
Please do not use getDirname and getFilename in nested other methods, instead always use them in the root of your file, otherwise it may return wrong results.
`js
// /path/to/the/script.mjs
import { getDirname, getFilename } from 'cross-dirname'
console.log(getDirname()) // outputs "/path/to/the"
console.log(getFilename()) // outputs "/path/to/the/script.mjs"
`
`js
// /path/to/the/script.cjs
const { getDirname, getFilename } = require('cross-dirname');
console.log(getDirname() === __dirname) // true
console.log(getFilename() === __filename) // true
`
`ts
// /path/to/the/script.ts
import { getDirname, getFilename } from 'https://deno.land/x/cross_dirname@v0.0.4/mod.ts';
console.log(getDirname()); // outputs "/path/to/the"
console.log(getFilename()); // outputs "/path/to/the/script.ts"
`
You can use NPM packages in GJS with a bundler like esbuild.
Take a look at the examples for an GJS + esbuild example, you can start the example like this:
`bashInstall dev dependencies
npm install
$3
You can run the examples with
`bashnpm install
npm run build
deno run ./examples/deno/index.ts
-> /.../examples/deno
node ./examples/node/index.cjs
-> /.../examples/node
node ./examples/node/index.mjs
-> /.../examples/node
node ./examples/gjs/esbuild.mjs
gjs -m ./examples/gjs/index.js
-> /.../examples/gjs
`$3
Contributions for more platforms are welcome :)
$3
This module has been tested on the following platforms:
| Runtime | Type | Platform | State |
|---------|--------|----------|----------|
| Node.js | CJS | Linux | ✔ |
| Node.js | CJS | MacOS | ✔ |
| Node.js | CJS | Windows | ✔ |
| Node.js | ESM | Linux | ✔ |
| Node.js | ESM | MacOS | ✔ |
| Node.js | ESM | Windows | ✔ |
| Deno | ESM | Linux | ✔ |
| Deno | ESM | MacOS | ✔ |
| Deno | ESM | Windows | ✔ |
| Gjs | ESM | Linux | ✔ |
| Gjs | ESM | MacOS | UNTESTED |
| Gjs | ESM | Windows | UNTESTED |
| Chrome | ESM | Browser | ✔ |
| Chrome | CJS | Browser | ✔ |
You can run all tests with:
`
npm run test
`Or the tests for a special runtime:
`
npm run test:node
npm run test:deno
npm run test:gjs
npm run test:browser´
``