Tooling#

JavaScript’s tooling is decentralised; most teams assemble their own stack from npm packages.

Runtimes#

  • Node.js, the dominant server-side runtime.

  • Deno, secure-by-default, TypeScript-native.

  • Bun, fast all-in-one runtime + bundler + package manager.

  • Browsers (V8, SpiderMonkey, JavaScriptCore).

Manage Node versions with nvm, fnm, or volta.

Package Managers#

  • npm, ships with Node.

  • pnpm, fast, disk-efficient (content-addressable store).

  • Yarn, alternative client; v2+ uses Plug’n’Play.

$ npm install lodash
$ pnpm add -D vitest
$ yarn add express

Bundlers / Build#

Linters#

  • ESLint, the standard linter.

$ npm install -D eslint
$ npx eslint --init
$ npx eslint src/

Formatter#

$ npm install -D prettier
$ npx prettier --write .

Testing#

$ npx vitest
$ npx jest --watch

Debugging#

  • node --inspect-brk script.js, attach Chrome DevTools or VS Code.

  • Browser DevTools, step through, inspect heap, profile.

  • ndb, improved Node debugger.

Documentation#

Editor Support#

  • TypeScript Language Server (works for plain JS too via checkJs: true).

  • eslint and prettier plugins for VS Code, Vim, Emacs, JetBrains.

Type Checking#

  • TypeScript, type-check .js with // @ts-check and JSDoc, or commit to .ts.

  • Flow, alternative type checker (less common today).