Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 7 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 (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-10-21T17:25:48.000Z (3 months ago)
- Last Synced: 2024-10-22T07:27:00.835Z (3 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/es-main
- Size: 258 KB
- Stars: 85
- Watchers: 4
- Forks: 6
- Open Issues: 0
-
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.