# NodeJS

> Write reliable Node.js avoiding event loop blocking, async pitfalls, ESM gotchas, and memory leaks.

- Skill: `dvcrn/nodejs` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add dvcrn/nodejs`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/nodejs/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/nodejs

---


## Quick Reference

| Topic | File |
|-------|------|
| Callbacks, Promises, async/await, event loop | `async.md` |
| CommonJS vs ESM, require vs import | `modules.md` |
| Error handling, uncaught exceptions | `errors.md` |
| Readable, Writable, Transform, backpressure | `streams.md` |
| Memory leaks, event loop blocking, profiling | `performance.md` |
| Input validation, dependencies, env vars | `security.md` |
| Jest, Mocha, mocking, integration tests | `testing.md` |
| npm, package.json, lockfiles, publishing | `packages.md` |

## Critical Traps

- `fs.readFileSync` blocks entire server — use `fs.promises.readFile`
- Unhandled rejection crashes Node 15+ — always `.catch()` or try/catch
- `process.env` values are strings — `"3000"` not `3000`, parseInt needed
- `JSON.parse` throws on invalid — wrap in try/catch
- `require()` cached — same object, mutations visible everywhere
- Circular deps return incomplete export — restructure to avoid
- Event listeners accumulate — `removeListener` or `once()`
- `async` always returns Promise — even for plain return
- `pipeline()` over `.pipe()` — handles errors and cleanup
- No `__dirname` in ESM — use `fileURLToPath(import.meta.url)`
- `Buffer.from(string)` — encoding matters, default UTF-8

