https://github.com/tschaub/es-main
Test if an ES module is run directly (require.main replacement)
https://github.com/tschaub/es-main
Last synced: 11 days ago
JSON representation
Test if an ES module is run directly (require.main replacement)
- Host: GitHub
- URL: https://github.com/tschaub/es-main
- Owner: tschaub
- Created: 2020-02-19T22:49:19.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-05-12T20:00:33.000Z (15 days ago)
- Last Synced: 2025-05-12T21:19:57.705Z (15 days ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/es-main
- Size: 605 KB
- Stars: 91
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# es-main
Test if an [ES module](https://nodejs.org/api/esm.html) is run directly with Node.js. Acts as a replacement for `require.main`.
## use
```js
import esMain from 'es-main';if (esMain(import.meta)) {
// Module run directly.
}
```## why?
It can be useful to have a module that is both imported from other modules and run directly. With CommonJS, it is possible to have a top-level condition that checks if a script run directly like this:
```js
if (require.main === module) {
// Do something special.
}
```With ES modules in Node.js, `require.main` is [not available](https://nodejs.org/dist/latest-v14.x/docs/api/esm.html#esm_no_require_exports_module_exports_filename_dirname). Other alternatives like `process.mainModule` and `module.parent` are also not defined for ES modules. In the future, there may be [an alternative way](https://github.com/nodejs/modules/issues/274) to do this check (e.g. `import.meta.main` or a special `main` export). Until then, this package provides a workaround.