EN

Node.js

Přehled Node.js pokrývající správu verzí (nvm/fnm/Volta), npm, Express.js, package.json, ladění, Vite, Next.js a Nodemon.

Co tato dovednost pokrývá

Node.js je JavaScriptový runtime postavený na V8 enginu z Chrome, který umožňuje spouštět JavaScript na straně serveru. Tato stránka je přehledem konceptů, nástrojů a příkazů, které se v každodenním vývoji v Node.js opakují: správa verzí, npm, Express.js, package.json, ladění a nástroje Vite/Next.js/Nodemon.

Kdy ji použít

  • Instalace, přepínání nebo připnutí verze Node.js pro projekt (nvm, fnm, Volta, .nvmrc)
  • Správa balíčků, skriptů nebo publikování přes npm
  • Vytvoření nebo zapojení minimálního Express.js API, včetně v rámci MERN stacku
  • Čtení nebo úprava package.json — závislosti, skripty, typ modulu, rozsahy verzí
  • Ladění, profilování nebo logování běžícího Node procesu (Node Inspector, Chrome DevTools, VS Code, Winston, Jest/Mocha)
  • Nastavení Vite, Next.js nebo Nodemon pro projekt

Správa verzí

Node Version Manager (nvm)

Node Version Manager umožňuje instalovat a přepínat mezi více verzemi Node.js.

Instalace

# Using curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# Using wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

Základní příkazy

nvm --version                    # Check nvm version
nvm list                         # List installed versions
nvm list-remote                  # List available versions
nvm install node                 # Install latest Node.js
nvm install 18.17.0             # Install specific version
nvm use 18.17.0                 # Switch to specific version
nvm use node                    # Use latest version
nvm alias default 18.17.0       # Set default version
nvm current                     # Show current version
nvm which node                  # Show path to current version

Verze Node.js specifická pro projekt

# Create .nvmrc file in project root
echo "18.17.0" > .nvmrc

# Use version specified in .nvmrc
nvm use

# Install version if not available
nvm install

Alternativní správci verzí

fnm (Fast Node Manager)

# Installation
curl -fsSL https://fnm.vercel.app/install | bash

# Usage
fnm install 18.17.0
fnm use 18.17.0
fnm default 18.17.0
fnm list

Volta

# Installation
curl https://get.volta.sh | bash

# Usage
volta install node@18.17.0
volta pin node@18.17.0

NPM Package Manager

NPM (Node Package Manager) je výchozí správce balíčků pro aplikace v Node.js.

Inicializace projektu

npm init                    # Interactive setup
npm init -y                # Skip prompts with defaults
npm create vite@latest     # Create Vite project (doporučená náhrada CRA týmem React)
npm create next-app@latest # Create Next.js app

Správa balíčků

npm install                    # Install all dependencies
npm install <package>          # Install package
npm install <package> --save-dev  # Install as dev dependency
npm install <package> --global    # Install globally
npm install <package>@<version>   # Install specific version
npm uninstall <package>       # Remove package
npm update                    # Update all packages
npm update <package>          # Update specific package
npm outdated                  # Check for outdated packages

Vývojový workflow

npm run dev      # Start development server
npm run build    # Build for production
npm run start    # Start production server
npm run test     # Run tests
npm run lint     # Run linter
npm run preview  # Preview production build

Informace o balíčcích

npm list                    # List installed packages
npm list --depth=0          # List top-level packages only
npm list --global           # List globally installed packages
npm info <package>          # Show package information
npm search <package>        # Search for packages
npm view <package> versions # Show available versions

Správa cache

npm cache clean --force  # Clear cache
npm cache verify         # Verify cache integrity

Publikování balíčků

npm login                 # Login to npm registry
npm publish               # Publish package
npm version patch|minor|major  # Bump version
npm unpublish <package>@<version>  # Unpublish package

Konfigurace

npm config list                    # Show all config
npm config get registry           # Get registry URL
npm config set registry https://registry.npmjs.org/  # Set registry
npm config delete <key>           # Delete config key

Skripty

npm run <script-name>      # Run custom script
npm run-script <script-name>  # Alternative syntax

Užitečné přepínače

  • --save-dev nebo -D: Instalace jako vývojová závislost
  • --global nebo -g: Globální instalace
  • --force nebo -f: Vynucení operace
  • --production: Přeskočení vývojových závislostí při instalaci
  • --dry-run: Zobrazí, co by se provedlo, bez spuštění
  • --silent: Potlačí výstup npm

Express.js Framework

Express.js je minimalistický a flexibilní webový framework pro Node.js.

Základní nastavení

npm install express --save
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

MERN Stack

MERN = MongoDB + Express.js + React + Node.js

Express.js slouží jako backendový API server v MERN stacku a zajišťuje HTTP požadavky a odpovědi mezi React frontendem a MongoDB databází.

Konfigurace Package.json

Soubor package.json obsahuje metadata o projektu v Node.js a definuje závislosti a skripty.

Základní struktura

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "My Node.js application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest",
    "build": "webpack --mode production",
    "lint": "eslint .",
    "lint:fix": "eslint . --fix"
  },
  "keywords": ["node", "javascript"],
  "author": "Your Name <email@example.com>",
  "license": "MIT"
}

Závislosti

{
  "dependencies": {
    "express": "^4.18.2",
    "lodash": "~4.17.21"
  },
  "devDependencies": {
    "nodemon": "^2.0.20",
    "jest": "^29.3.1",
    "eslint": "^8.31.0"
  },
  "peerDependencies": {
    "react": ">=16.8.0"
  },
  "optionalDependencies": {
    "fsevents": "^2.3.2"
  }
}

Příklady skriptů

{
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon --watch src server.js",
    "test": "jest --coverage",
    "test:watch": "jest --watch",
    "build": "webpack --mode production",
    "build:dev": "webpack --mode development",
    "lint": "eslint src/",
    "lint:fix": "eslint src/ --fix",
    "format": "prettier --write src/",
    "clean": "rm -rf dist/",
    "prebuild": "npm run clean",
    "postinstall": "npm run build",
    "serve": "serve -s dist/",
    "docker:build": "docker build -t my-app .",
    "docker:run": "docker run -p 3000:3000 my-app"
  }
}

Konfigurační pole

{
  "engines": {
    "node": ">=16.0.0",
    "npm": ">=8.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/username/repo.git"
  },
  "bugs": {
    "url": "https://github.com/username/repo/issues"
  },
  "homepage": "https://github.com/username/repo#readme"
}

Konfigurace modulů

{
  "type": "module",
  "exports": {
    ".": {
      "import": "./dist/index.js",
      "require": "./dist/index.cjs"
    },
    "./package.json": "./package.json"
  },
  "files": [
    "dist/",
    "README.md",
    "LICENSE"
  ]
}

Rozsahy verzí

  • ^1.2.3: Kompatibilní s 1.2.3, povoluje minor a patch aktualizace
  • ~1.2.3: Kompatibilní s 1.2.3, povoluje jen patch aktualizace
  • >=1.2.3: Verze 1.2.3 nebo vyšší
  • <1.2.3: Verze nižší než 1.2.3
  • 1.2.3: Přesná verze 1.2.3

Ladění a vývoj

Node Inspector

node --inspect app.js              # Start with inspector
node --inspect-brk app.js          # Start with breakpoint at first line
node --inspect=0.0.0.0:9229 app.js # Bind to all interfaces

Chrome DevTools

  1. Spusťte node --inspect app.js
  2. Otevřete Chrome a přejděte na chrome://inspect
  3. Klikněte na “Open dedicated DevTools for Node”

Ladění ve VS Code

Vytvořte .vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/app.js",
      "console": "integratedTerminal"
    },
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to Process",
      "port": 9229
    }
  ]
}

Proměnné prostředí

NODE_ENV=development node app.js
DEBUG=* node app.js
DEBUG=app:* node app.js

Soubory .env

NODE_ENV=development
PORT=3000
DATABASE_URL=mongodb://localhost:27017/myapp

Načtení pomocí dotenv:

require('dotenv').config();

Profilování výkonu

node --prof app.js
node --prof-process isolate-*.log > profile.txt

Ladění paměti

node --inspect --max-old-space-size=4096 app.js
node --trace-gc app.js

Logování

Winston

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

Debug Module

const debug = require('debug')('app:server');
debug('Starting server on port %d', port);

Testování

Jest

npm test
npm test -- --watch
npm test -- --coverage

Mocha

npx mocha test/
npx mocha test/ --watch
npx mocha test/ --reporter spec

Časté vzory ladění

// Console debugging
console.log('Debug:', variable);
console.error('Error:', error);
console.time('operation');
console.timeEnd('operation');

// Breakpoint debugging
debugger;

// Process debugging
process.on('uncaughtException', (err) => {
  console.error('Uncaught Exception:', err);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});

Sledování výkonu

// Process metrics
console.log('Memory usage:', process.memoryUsage());
console.log('CPU usage:', process.cpuUsage());

// Event loop monitoring
const { performance } = require('perf_hooks');
const start = performance.now();
// ... code to measure
const end = performance.now();
console.log(`Execution time: ${end - start} ms`);

Build nástroj Vite

Vite je rychlý build nástroj a vývojový server pro moderní webové projekty.

Nastavení projektu

npm create vite@latest my-app
cd my-app
npm install
npm run dev

React šablona

npm create vite@latest my-app --template react
cd my-app
npm install
npm run dev

Struktura projektu

my-app/
├── index.html
├── vite.config.js
├── package.json
├── src/
│   ├── main.jsx
│   └── App.jsx
└── public/

Framework Next.js

Next.js je React framework pro produkci s vestavěným SSR, SSG a API routes.

Nastavení projektu

npx create-next-app@latest my-nextjs-app
cd my-nextjs-app
npm run dev

Dostupné na: http://localhost:3000

Nástroj Nodemon

Nodemon automaticky restartuje aplikaci v Node.js při změně souborů.

Instalace a použití

npm install -g nodemon
nodemon app.js
nodemon --watch src app.js
nodemon --ignore node_modules/ app.js

Konfigurace (nodemon.json)

{
  "watch": ["src"],
  "ext": "js,json",
  "ignore": ["node_modules/", "dist/"],
  "exec": "node app.js"
}

Nodemon je nezbytný pro vývojový workflow, protože poskytuje hot reload bez ručního restartování serveru.

Další zdroje