Node.js / DevTools

    Package Managers w Node.js

    npm, pnpm (content-addressable), yarn Berry (PnP), Bun — szybkość instalacji, workspaces, package.json i Node.js versioning.

    pnpm
    Strict + fast
    Bun
    Ultra fast
    npm
    Default
    Yarn Berry
    PnP cache

    6 package managers — porównanie

    npm, pnpm, yarn v1, yarn Berry, Bun i Deno — szybkość instalacji, przechowywanie pakietów i obsługa workspaces.

    Manager Szybkość Store Workspaces Kiedy
    npm Baseline node_modules per project npm 7+ Default, zero-config, solo
    pnpm 2x szybszy Content-addressable store (~/.pnpm-store) Tak (najlepsze) Monorepo, disk efficiency, strictness
    yarn v1 Podobny do npm node_modules per project Tak (v1) Legacy projects, yarn classic
    yarn Berry (v4) Fast (PnP) PnP cache (brak node_modules) Tak (zero-installs) Zero-install, strict monorepo
    Bun 10-100x szybszy Global cache (Bun store) Tak Speed-critical, Bun runtime
    Deno (npm compat) Fast DENO_DIR cache Ograniczone Deno projekty, npm compat mode

    Często zadawane pytania

    Co to jest pnpm i dlaczego jest szybszy od npm i yarn?

    pnpm (performant npm, Zoltan Kochan, 2017): content-addressable store. Hard links zamiast kopii. Strict node_modules (non-flat). Dlaczego szybszy: npm/yarn: każdy project kopiuje paczkę do node_modules. 1000 projektów z React = 1000 kopii React. pnpm: jeden store (~/.pnpm-store). Hard links w node_modules. Mniej disk I/O. Content-addressable: hash(package@version) = ścieżka w store. Raz pobrane = zawsze dostępne. Strict node_modules: flat node_modules (npm) pozwala na phantom dependencies. pnpm: tylko zdeklarowane deps dostępne. Lepsze dla bezpieczeństwa. Phantom dependency problem: import 'moment' w A, ale A nie deklaruje moment w package.json — działa w npm (bo flat), nie działa w pnpm. pnpm workspaces: monorepo support. pnpm-workspace.yaml. packages: ['packages/*', 'apps/*']. Catalog feature (pnpm 9+): catalog: {react: '18.3.1'}. Shared version w wszystkich packages. workspace: protokół: pnpm add @myorg/shared@workspace:*. Filter: pnpm --filter @myorg/web build. --filter ... (wszystkie + zależności). Benchmarks: pnpm ~2x szybszy niż npm dla cold install. ~30% szybszy niż yarn. Warm install: pnpm wygrywa dzięki store. Migracja: npm install -g pnpm. pnpm import (z package-lock.json). .npmrc: shamefully-hoist=true (jeśli potrzebujesz flat). pnpm store: pnpm store path. pnpm store prune.

    npm vs yarn — historia i różnice w 2024?

    npm (Node Package Manager, 2010): wbudowany w Node.js. Domyślny. npm install, npm run, npm publish. package-lock.json (npm 5+). npm workspaces (npm 7+). npm scripts. Wersje: npm 9/10 (2024). npx — run bez instalacji. npm ci — clean install z lockfile. npm audit — security scan. npm pack — build tarball. npm registry: publiczny rejestr. Private: GitHub Packages, Verdaccio. yarn (Facebook, 2016): stworzony gdy npm był powolny i niestabilny. yarn.lock. Offline cache. Parallel installs. yarn v1 (classic): najpopularniejsza. Frozen lockfile: --frozen-lockfile. yarn v2/v3/v4 (Berry, 2020+): Plug'n'Play (PnP) zamiast node_modules. Zero-installs: lockfile + zip cache w repo. Nowatorski ale breaking. Kontrowersyjny w community. Wiele projektów pozostaje na v1. yarn Berry vs pnpm: Berry — PnP (no node_modules). pnpm — strict node_modules z hard links. Benchmark 2024: pnpm > yarn v1 > npm (cold install). npm vs pnpm dla solo dev: npm — zero config. pnpm — disk savings, strictness. Dla monorepo: pnpm workspaces (najlepsze DX). Dla enterprise: pnpm lub yarn berry. package.json engines field: 'engines': {'node': '>=20', 'pnpm': '>=9'}. volta: tool version manager. node, npm, yarn per project (.voltarc). fnm: szybka alternatywa dla nvm (Rust-based). nvm: node version manager. .nvmrc w projekcie. Automatyczne przełączanie.

    Bun package manager — najszybszy w 2024?

    Bun: JavaScript runtime + package manager (Jarred Sumner, 2021). bun install — najszybszy package manager. Zig + JavaScriptCore. bun install: 10-100x szybszy od npm. No node_modules copying (podobnie pnpm ale inaczej). Binary lockfile (bun.lockb) — szybszy parse. Kompatybilny z npm registry. Backward compatible z package.json. Bun workspace: podobne do pnpm workspaces. workspace:* protocol. bunfig.toml konfiguracja. bun add / bun remove / bun update. bun link / bun pm. Bun jako runtime: bun run script.ts — bez transpilacji. bun dev server. Bun test: wbudowany test runner (jak Jest). Bun build: bundler. Bun vs pnpm vs npm: install speed: Bun >> pnpm > yarn > npm. Kompatybilność: npm/pnpm lepsza dla Node.js ecosystem. Bun runtime: nie zawsze Node.js compatible. Disk usage: Bun i pnpm podobne (store-based). Bun dla Next.js: Next.js oficjalnie wspiera Bun (install only). bun install zamiast npm install. bun run dev — używa Node.js pod spodem. package manager adoption 2024: npm — 60% (domyślny). pnpm — 20% (monorepo, strict). yarn — 15% (legacy). Bun — 5% (rosnący). lock-only mode: npm ci (CI). pnpm install --frozen-lockfile. yarn install --frozen-lockfile. bun install --frozen-lockfile. Zawsze frozen lockfile w CI.

    package.json — zaawansowane opcje, scripts i workspaces?

    package.json kluczowe pola: name, version, description, main, module, exports, types. exports field (conditional exports): './': {import: './dist/index.mjs', require: './dist/index.cjs', types: './dist/index.d.ts'}. Dla package authors — dual ESM/CJS. scripts: pre/post hooks: pretest, postbuild. npm run build -> prebuild + build + postbuild. Lifecycle hooks: prepare (po install), prepublishOnly, prepack. cross-env: cross-platform env vars w scripts. 'build': 'cross-env NODE_ENV=production webpack'. concurrently: run multiple scripts. 'dev': 'concurrently npm:dev:*'. npm-run-all: run-p (parallel), run-s (sequential). Workspaces configuration: 'workspaces': ['packages/*', 'apps/*']. root install: npm install -> installs all workspaces. root scripts -> hoisted node_modules. Versioning: semantic versioning. ~1.2.3 (patch only). ^1.2.3 (minor + patch). 1.2.3 (exact). * (latest — niebezpieczne). Resolutions / overrides: npm overrides: {'lodash': '4.17.21'}. yarn resolutions: starsze. Wymuszaj bezpieczną wersję dependency. peerDependencies: dla plugin authors. Nie instalowane automatycznie. engines field: wymagania Node.js version. packageManager field: 'pnpm@9.0.0'. Corepack: automatyczne zarządzanie package managerem. node --experimental-corepack. private: true — zapobiegaj przypadkowemu publish. files field: które pliki trafiają do npm. bundleDependencies / optionalDependencies. sideEffects: false — tree-shaking hint.

    Zarządzanie wersjami Node.js — nvm, fnm, Volta i .nvmrc?

    Problem: różne projekty wymagają różnych wersji Node.js. Node.js LTS: Long Term Support. Current + Maintenance. 2024: Node.js 20 LTS (Iron), Node.js 22 LTS (Jod). nvm (Node Version Manager): najpopularniejszy. nvm install 20. nvm use 20. nvm alias default 20. .nvmrc: plik w projekcie. Zawiera: 20.11.1 lub lts/iron. nvm use (bez argumentu) -> czyta .nvmrc. auto-switching: .bashrc/.zshrc + eval nvm use. Wolny startup (~200ms). fnm (Fast Node Manager, Rust): drop-in replacement. fnm install 20. fnm use 20. Automatyczne: eval $(fnm env --use-on-cd). Znacznie szybszy niż nvm. .node-version lub .nvmrc. Volta: tool manager dla Node + npm + yarn. pin: volta pin node@20. Projekt-specific. Automatyczne switching bez eval. package.json 'volta': {'node': '20.11.1', 'pnpm': '9.0.0'}. volta install node@20. Asdf: universal version manager. Obsługuje Node, Python, Ruby, Go, Rust. .tool-versions plik. Plugin-based. nvs (Windows-friendly): cross-platform nvm. Dobry dla Windows devs. Docker: node:20-alpine. Izolacja per container. CI/CD: .nvmrc -> actions/setup-node@v4. 'node-version-file: .nvmrc'. Node.js 22 (2024): require(esm) — importuj ESM z CJS. --experimental-require-module. WebSocket (native, bez ws npm). test runner ulepszony. Permission Model stabilny. fetch stable. WHATWG URLPattern. Single Executable Applications (SEA): package Node.js app to binary.

    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