Node.js async_hooks API Availability Check
This package, `has-async-hooks`, provides a lightweight utility function to programmatically determine if the `async_hooks` API is available in the current Node.js runtime environment. Currently at version 1.0.0, it is a stable, single-purpose library. Its primary differentiator is its simplicity and explicit focus on feature detection for `async_hooks`, which became stable in Node.js 8.0.0. This utility is particularly useful for conditional code execution or polyfilling in environments where compatibility with various Node.js versions (especially older ones) is a concern. The library has a very stable release cadence, with its initial 1.0.0 release being its sole version to date, indicating its 'fire and forget' nature once the feature detection logic is established.
Common errors
-
TypeError: hasAsyncHooks is not a function
cause Incorrect import syntax or attempting to access a named export that does not exist. The package exports a single default function.fixEnsure you are importing the default function correctly: `const hasAsyncHooks = require('has-async-hooks')` for CommonJS or `import hasAsyncHooks from 'has-async-hooks'` for ES Modules. -
ERR_REQUIRE_ESM
cause Attempting to use `require()` in an ES Module context without proper configuration for CommonJS interop.fixIf your project is an ES Module (e.g., `"type": "module"` in package.json), use `import hasAsyncHooks from 'has-async-hooks'` instead of `require('has-async-hooks')`.
Warnings
- gotcha This utility only detects the presence of the `async_hooks` API; it does not polyfill or provide an alternative implementation for environments where it's absent. Developers must implement their own fallback logic.
- gotcha If `hasAsyncHooks()` returns `false`, it indicates that the current Node.js runtime is likely older than version 8.0.0, as `async_hooks` became a stable API in Node.js 8.x. The module does not explicitly check the Node.js version, only the API availability.
Install
-
npm install has-async-hooks -
yarn add has-async-hooks -
pnpm add has-async-hooks
Imports
- hasAsyncHooks
import { hasAsyncHooks } from 'has-async-hooks'import hasAsyncHooks from 'has-async-hooks'
- hasAsyncHooks (CommonJS)
const hasAsyncHooks = require('has-async-hooks')
Quickstart
const hasAsyncHooks = require('has-async-hooks');
if (hasAsyncHooks()) {
console.log('async_hooks API is available in this Node.js version.');
// Example usage: You might conditionally load async_hooks dependent code
const async_hooks = require('async_hooks');
const asyncId = async_hooks.executionAsyncId();
console.log(`Current async ID: ${asyncId}`);
} else {
console.log('async_hooks API is NOT available in this Node.js version.');
console.log('This typically means you are running an older Node.js version (pre-8.x).');
}
// To demonstrate: This script will output 'true' on Node.js >= 8, 'false' on older versions.
// You can test by running with different Node.js versions.