Node.js / Tooling / DevOps

    Node.js Version Managers

    Volta (Rust, package.json pin), fnm (szybki), mise (polyglot), nvm (klasyk) i Corepack (package manager versioning).

    Volta
    Rust fast
    fnm
    Szybki nvm
    mise
    Polyglot
    Corepack
    pkg mgr

    6 Node.js version managers — porównanie

    Volta, fnm, mise, nvm, nvm-windows i Corepack — język implementacji i kiedy wybrać.

    Narzędzie Język Kiedy
    Volta Rust Cross-platform, package.json pin, Windows support
    fnm Rust Szybki nvm replacement, .nvmrc kompatybilny, prosty
    mise (rtx) Polyglot (Node+Python+Ruby+Go), .tool-versions
    nvm Linux/macOS, stary standard, ogromna dokumentacja
    nvm-windows Windows alternative do nvm (oddzielny projekt)
    Corepack package manager versioning (yarn/pnpm) per projekt

    Często zadawane pytania

    Volta — Node.js version manager nowej generacji?

    Volta: szybki, cross-platform Node.js manager. Rust. Shims — przezroczysty. Instalacja: curl https://get.volta.sh | bash (macOS/Linux). Winget na Windows. Podstawowe komendy: volta install node@20. volta install node@lts. volta list all. volta pin node@20 — przypnij w projekcie. Pinning: volta pin node@20 dodaje do package.json: {volta: {node: '20.11.0', npm: '10.2.0'}}. Automatyczne przełączanie wersji per projekt. Brak .nvmrc. package.json jako source of truth. Zalety Volta: szybki (Rust). Cross-platform Windows (nvm słabo na Windows). Automatyczny pin. Shared tools: volta install yarn@4. volta install pnpm. volta install typescript. Narzędzia per projekt. CI/CD: Volta w GitHub Actions. Czytaj package.json. Automatyczna wersja. actions/setup-node alternatywa. Porównanie z nvm: Volta — Rust, szybki, Windows, package.json pin. nvm — bash, wolniejszy, Linux/macOS głównie. fnm — szybszy niż nvm, ale brak narzędzi globalnych jak Volta. Corepack: npm install -g corepack (lub wbudowany Node.js 16.9+). corepack enable. yarn/pnpm version z packageManager w package.json. {packageManager: 'pnpm@8.15.0'}. Razem: Volta dla Node.js + Corepack dla package manager.

    fnm i mise — szybkie alternatywy dla nvm?

    fnm (Fast Node Manager): szybki nvm replacement. Rust. Prosty. Instalacja: curl -fsSL https://fnm.vercel.app/install | bash. Winget: winget install Schniz.fnm. Komendy: fnm install 20. fnm install --lts. fnm use 20. fnm default 20. fnm list. .nvmrc: automatyczne wczytanie. fnm use — sprawdza .nvmrc lub .node-version. Lub fnm env --use-on-cd (shell hook). Shell integration: fnm env — konfiguracja PATH. Dodaj do .bashrc/.zshrc. eval $(fnm env --use-on-cd). Szybkość: znacznie szybszy niż nvm. nvm dodaje ~100ms do shell startu. fnm — znikomy overhead. mise (dawniej rtx): polyglot version manager. Rust. Nie tylko Node.js. Instalacja: curl https://mise.run | sh. Konfiguracja: .mise.toml lub .tool-versions. [tools]. node = '20'. python = '3.12'. ruby = '3.3'. Jeden plik dla całego projektu. Zintegrowany z asdf (kompatybilny). mise install — wszystkie tools z konfiguracji. Automatyczne switching: wejście do katalogu. asdf compatibility: .tool-versions plik. asdf wtyczki kompatybilne. Zastępuje asdf (szybszy). Proto: Moonrepo (Turborepo team). Nowoczesny. WASM plugins. Protokół wtyczek. proto install node 20. proto use. Porównanie: fnm — prosty Node.js manager. mise — polyglot (Node + Python + Ruby + Go). Volta — package-level pinning. nvm — stary standard, wolny.

    nvm — najstarszy i nadal popularny Node.js manager?

    nvm (Node Version Manager): bash script. macOS/Linux. Najdłużej istnieje. Ogromna dokumentacja. Instalacja: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash. Dodaj do .bashrc/.zshrc: export NVM_DIR=$HOME/.nvm. [ -s $NVM_DIR/nvm.sh ] && source $NVM_DIR/nvm.sh. Komendy: nvm install 20. nvm install --lts. nvm use 20. nvm alias default 20. nvm list. nvm ls-remote — dostępne wersje. .nvmrc: echo '20' > .nvmrc. nvm use — automatycznie wczyta. nvm install — jeśli brak. Auto-use: add-nvm-use function do .bashrc. cdnvm() { cd $@. if [ -f .nvmrc ]; then nvm use. fi }. Windows: nvm-windows (oddzielny projekt). Nie jest tym samym co nvm. nvm-windows install 20.0.0. nvm-windows use 20.0.0. Problemy nvm: wolny shell start (source skryptu). Nie działa dobrze w Docker. Wymaga ponownej instalacji globalnych pakietów po zmianie wersji. Nie cross-platform. Node.js LTS: Long Term Support. node.js.org/en/about/releases. Current — najnowsza funkcje. LTS — stabilna dla produkcji. Maintenance — tylko security fixes. Active LTS: Node 20, Node 22 (2024). package.json engines: {engines: {node: '>=18.17.0', npm: '>=9.6.7'}}. Sprawdź zgodność. .npmrc: engine-strict=true. Brak zainstalowania bez poprawnej wersji. GitHub Actions: actions/setup-node@v4. node-version: '20'. node-version-file: '.nvmrc'. Cache: pnpm, npm, yarn.

    Corepack — package manager versioning w Node.js?

    Corepack: wbudowany w Node.js 16.9+. Zarządza wersjami npm, yarn, pnpm. Brak globalnej instalacji yarn/pnpm konieczna. Włączenie: corepack enable. Lub node --experimental-corepack (Node.js 22). packageManager field: package.json: {packageManager: 'pnpm@9.4.0'}. lub {packageManager: 'yarn@4.3.1'}. Corepack instaluje automatycznie. Prawidłowa wersja per projekt. Shims: yarn, pnpm jako shims. Przekierowanie do prawidłowej wersji. Brak kolizji między projektami. corepack prepare: corepack prepare pnpm@9.4.0 --activate. Pobierz i aktywuj. Offline: corepack pack — paczka offline. Deploy bez internetu. CI: corepack enable w setup. actions/setup-node ma opcję. node-version + enable-corepack: true. Yarn Berry (v4): Zero-Installs. PnP (Plug'n'Play). .yarnrc.yml konfiguracja. yarnPath: .yarn/releases/yarn-4.x.x.cjs. Corepack: yarn dlx zamiast npx. Migracja yarn classic -> yarn berry: yarn set version stable. Plug'n'Play: brak node_modules! .pnp.cjs. VSCode: yarn dlx @yarnpkg/sdks vscode. Inline installs: pnpm dlx create-vite. npm create vite@latest. yarn create vite. npx create-next-app@latest. Porównanie managers 2024: npm — default, wolniejszy, phantom deps. pnpm — szybki, disk-efficient, strict. yarn berry — PnP, zero-installs, enterprise. bun install — najszybszy, niekompatybilności.

    Docker i Node.js — best practices wersjonowania?

    Docker + Node.js wersja: Dockerfile: FROM node:20-alpine. Konkretna wersja — stabilność. Nie FROM node:latest. Multi-stage build: FROM node:20-alpine AS builder. WORKDIR /app. COPY package*.json ./. RUN npm ci. COPY . .. RUN npm run build. FROM node:20-alpine AS runner. COPY --from=builder /app/dist ./dist. COPY --from=builder /app/node_modules ./node_modules. Nie-root user: USER node. RUN chown -R node:node /app. Bezpieczeństwo. .dockerignore: node_modules. .git. dist. .env. npm ci vs npm install: npm ci — deterministyczny. package-lock.json musi istnieć. Szybszy w CI. ARG NODE_VERSION=20: ARG NODE_VERSION=20. FROM node:${NODE_VERSION}-alpine. Build-arg przy budowaniu. npm shrinkwrap: package-lock.json alternatywa (stary). npm ci zamiast tego. Lock files: package-lock.json (npm). pnpm-lock.yaml (pnpm). yarn.lock (yarn). Commit lock file do repo. bun.lockb (bun). GitHub Actions: matrix builds: strategy.matrix.node-version: [18, 20, 22]. Testuj na wielu wersjach. node-version-file: package.json lub .nvmrc. .nvmrc best practices: echo 'lts/iron' > .nvmrc (LTS alias). lub echo '20.11.0' > .nvmrc (pinowana). Shared w teamie. CI czyta. nvm use bez argumentu. Renovate/Dependabot: automatyczne PR dla Node.js updates. Sprawdź package.json engines. Bezpieczne aktualizacje.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz