Node.js
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-devnebo-D: Instalace jako vývojová závislost--globalnebo-g: Globální instalace--forcenebo-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.31.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
- Spusťte
node --inspect app.js - Otevřete Chrome a přejděte na
chrome://inspect - 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.