- npm funguje ako rozsiahly register balíkov a zároveň ako primárny nástroj CLI na inštaláciu, aktualizáciu, odstraňovanie a audit závislostí Node.js.
- Projekty sa spoliehajú na package.json na definovanie závislostí, skriptov a vstupných bodov prostredníctvom polí ako main, exports, imports a type.
- Lokálne verzus globálne inštalácie, rozsahy semverov a typy závislostí (závislosti, devDependencies, optionalDependencies) riadia, ako a kde sa balíky používajú.
- Pokročilé exporty, podmienené exporty a importy podcest poskytujú detailnú kontrolu nad tým, čo balík ako nodebbs vystavuje rôznym prostrediam.

Ak sa snažíte pochopiť, ako npm balík ako „nodebbs“ zapadá do ekosystému Node.js, najprv potrebujete dôkladné znalosti čo je npm, ako sú balíky štruktúrované a ako Node rozlišuje a sprístupňuje moduly. Moderné projekty Node.js vo veľkej miere závisia od npm, nielen pri inštalácii kódu, ale aj pri správe skriptov, zabezpečenia, verziovania a spôsobu, akým váš balík používajú ostatní.
Táto príručka vás prevedie npm od základov — čo to je, ako fungujú lokálne a globálne balíčky, ako ich nainštalovať, aktualizovať a odstrániť, ako package.json je štruktúrovaný a ako pokročilé funkcie, ako napríklad exports a imports Polia ovládajú, čo váš balík (napríklad nástroj na vytváranie fór, ako napríklad nodebbs) sprístupňuje spotrebiteľom. Všetko je vysvetlené v zrozumiteľnej angličtine s množstvom príkladov, takže môžete s istotou publikovať a používať npm balíky.
Čo je npm a prečo je dôležitý pre balíky ako nodebbs
npm (Správca balíkov uzlov) je nástroj príkazového riadku a zároveň obrovský online register open source balíkov Node.js. Keď si nainštalujete Node.js do systému, npm sa nainštaluje automaticky, čo vám poskytne okamžitý prístup k miliónom opakovane použiteľných modulov publikovaných komunitou na adrese npmjs.com.
register npm je v podstate najväčším úložiskom kódu v jednom jazyku na planéte s viac ako miliónom publikovaných balíkov, ktoré pokrývajú takmer každú predstaviteľnú úlohu. Tieto balíky siahajú od malých utilít (jedna funkcia) až po kompletné frameworky, rozhrania príkazového riadku a kostry aplikácií, ktoré každý deň poháňajú produkčné aplikácie.
Pôvodne, npm bol navrhnutý čisto na správu závislostí pre backendové Node.js projekty, ale dnes je to aj základný nástroj pre frontendové pracovné postupy. Môžete si nainštalovať React, nástroje ako Webpack alebo Vite, CSS frameworky, testovacie runnery a mnoho ďalšieho – všetko distribuované ako npm balíčky.
Pri práci s konkrétnym balíkom, ako napr. nodebbs, npm je zodpovedný za sťahovanie svojho kódu, riešenie jeho závislostí, udržiavanie konzistentnosti verzií v rámci vášho tímu a prepojenie všetkých skriptov alebo CLI, ktoré sprístupňuje. Preto je pochopenie npm nevyhnutné, ak chcete balík sami vyhodnotiť, prispôsobiť alebo dokonca publikovať – pozrite si rozsiahly útok na dodávateľský reťazec NPM.
Node.js, npm a ako ich nainštalovať
Na použitie ľubovoľného npm balíka – vrátane nodebbs – potrebujete Nainštalované Node.js a npm na vašom počítači. npm je súčasťou balíka Node, takže si ho stačí nainštalovať z oficiálnej stránky a môžete začať.
Odporúčaný prístup je nainštalovať Node.js pomocou správcu verzií, ako napríklad nvm, čo vám umožňuje prepínať medzi viacerými verziami Node a npm. To uľahčuje testovanie projektu s rôznymi verziami Node a vyhýba sa problémom s oprávneniami, ktoré sa môžu vyskytnúť pri inštalátoroch pre celý systém.
Môžete si rýchlo overiť, či Uzol a npm sú už prítomné otvorením terminálu a spustením: node -v skontrolovať verziu uzla a npm -v na potvrdenie verzie npm.
Ak chýba súbor Node.js alebo je vaša verzia príliš stará, stiahnite si ho Vydanie s dlhodobou podporou (LTS) z nodejs.org pre váš operačný systém. V systémoch Windows a macOS inštalátor všetko nastaví; v systéme Linux môžete použiť NodeSource alebo preferovanú metódu vašej distribúcie, prípadne aj správcu verzií, ako napríklad nvm.
Základné koncepty npm: balíky, moduly a register
Vo svete Node.js, a "balík" je zbalený kus kódu, ktorý obsahuje všetko potrebné pre modul alebo aplikáciu: súbory JavaScript, metadáta, dokumentáciu a niekedy aj artefakty zostavenia. Balíky sa zvyčajne nachádzajú v adresári s package.json súbor s popisom toho, čo obsahujú.
A „modul“ je jednotka kódu, ktorú môžete importovať do Node.js pomocou require() or importa balík npm zvyčajne sprístupňuje jeden alebo viac modulov pre spotrebiteľov. Napríklad knižnica nástrojov môže exportovať jeden hlavný modul, zatiaľ čo komplexný balík, ako napríklad nodebbs, môže sprístupniť viacero vstupných bodov pre svoje serverové a klientske časti.
Balíky sú zverejnené pre verejnosť register npm (alebo do súkromných registrov), aby ich ostatní vývojári mohli nainštalovať jednoduchým príkazom. V podstate npm stiahne súbory, overí strom závislostí a všetko uloží do node_modules priečinok, aby ho vaša aplikácia mohla importovať.
Medzi populárne príklady npm balíkov patria frameworky ako Express, React a Vue, utility ako Lodash a Chalk, backendové pomocné programy ako Mongoose a Socket.io a nástroje ako Jest, Webpack, Babel, Nodemon a Axios. Balík ako nodebbs by sa nachádzal vedľa nich ako ďalšia inštalovateľná závislosť, ktorú zapojíte do svojho aplikačného stacku.
Práca s npm na príkazovom riadku
Rozhranie príkazového riadka (CLI) npm je spôsob inštalácie, odstraňovania, aktualizácie a kontroly balíkov, ako aj spôsob spúšťania projektových skriptov. V systéme Windows zvyčajne otvoríte príkazový riadok alebo PowerShell; v systémoch macOS a Linux použijete terminál.
Medzi najčastejšie používané príkazy npm patria npm install, npm uninstall, npm update, npm init, npm start, npm testa npm publishTieto príkazy spolu pokrývajú takmer všetko, čo potrebujete na správu závislostí projektu Node.js a úloh životného cyklu.
Ak chcete lokálne nainštalovať nový balík do projektu, zvyčajne spustíte príkaz npm install <package-name> z koreňového adresára projektu. Týmto sa balík stiahne do node_modules a s moderným npm automaticky pridá položku pod dependencies in package.json.
Globálne inštalácie s použitím npm install -g <package-name>, sú vyhradené pre nástroje, ktoré chcete mať k dispozícii kdekoľvek vo vašom systéme – napríklad nodemon, typescriptalebo iné rozhrania príkazového riadka. Vaše knižnice na úrovni aplikácie (vrátane nodebbs) takmer vždy patria do lokálnych dependencies miesto.
Inicializácia projektu Node a úloha package.json
Každý seriózny projekt Node.js začína package.json súbor, ktorý slúži ako manifest pre vašu aplikáciu alebo knižnicu. Uchováva metadáta (názov, verziu, popis), skripty, závislosti a informácie o tom, ako sa má balík načítať.
Tento súbor vytvoríte spustením npm init v prázdnom priečinku a potom odpovedať na niekoľko otázok týkajúcich sa projektu. Ak chcete otázky preskočiť, npm init -y generuje minimálny package.json s rozumnými predvolenými nastaveniami, ktoré môžete neskôr upraviť.
akonáhle package.json existuje, každý balík, ktorý nainštalujete, je zaznamenaný pod dependencies, devDependenciesalebo iné vyhradené sekcie. To umožňuje inému vývojárovi naklonovať váš repozitár a jednoducho ho spustiť npm install obnoviť celý strom závislostí.
Pre balík ako nodebbs, ktorý by ste možno chceli publikovať, package.json tiež deklaruje názov balíka, vstupné body a všetky polia ako main, exports, Alebo type ktoré ovládajú, ako Node rieši svoje moduly. To robí package.json ústredné pre spotrebu aj produkciu npm balíkov.
Lokálna vs. globálna inštalácia npm balíkov
Lokálne balíky sa inštalujú do aktuálneho projektu node_modules adresára a sú dostupné iba v rámci daného projektu. Keď spustíte npm install express or npm install nodebbs v priečinku projektu sa balík stane súčasťou grafu závislostí danej aplikácie.
Táto stratégia lokálnej inštalácie zabraňuje konflikty verzií medzi projektmi pretože každý projekt si udržiava vlastné kópie závislostí. Jedna aplikácia môže používať Express 4, zatiaľ čo iná používa Express 5, a nebudú si navzájom rušiť.
Globálne balíky, nainštalované pomocou npm install -g, sú umiestnené v celom systéme a zvyčajne sprístupňujú nástroje príkazového riadka. Môžete to použiť na nodemon, typescript, alebo pre generátory globálnych projektov, ale zriedka chcete, aby bol aplikačný kód ako nodebbs globálny.
npm vám tiež umožňuje zmeniť globálny prefix inštalácie pomocou npm config set prefix <path>, čo je užitočné, ak nemáte administrátorské práva alebo sa chcete vyhnúť chybám s povoleniami pri inštalácii globálnych CLI. Vaše globálne nástroje sa tak nachádzajú v adresári, do ktorého môže zapisovať používateľ.
Správa závislostí: inštalácia, aktualizácia a odstránenie
V každodennej práci strávite veľa času pridávanie, aktualizácia a občasné odstraňovanie závislostí npm.npm poskytuje jednoduché príkazy pre každú z týchto operácií, lokálne aj globálne.
Inštalácia všetkých závislostí v existujúcom projekte je rovnako jednoduchá ako spustenie npm install v adresári, kde package.json životy. npm prečíta zoznam závislostí a devDependencies a znovu vytvorí node_modules priečinok podľa toho.
Ak chcete pridať jednu závislosť, spustite príkaz npm install <package-name> (Alebo npm i <package-name> skrátene), voliteľne s príznakmi ako --save-dev, --save-optional, Alebo --no-saveTieto príznaky určujú, či sa balík zaznamená ako bežná závislosť, závislosť určená len pre vývoj alebo sa vôbec nezaznamená.
Aktualizáciu závislostí je možné vykonať v celom projekte pomocou npm update, ktorý aktualizuje balíky na novšie verzie, ktoré stále spĺňajú rozsahy verzií v package.jsonMôžete tiež zacieliť na jeden balík pomocou npm update <package-name>alebo pridať -g ak aktualizujete globálny nástroj.
Odinštalovanie balíka je symetrické: npm uninstall <package-name> odstráni ho z node_modules a čistí package.json vstup. Používanie npm uninstall -g robí to isté pre globálne nainštalované balíky.
Pochopenie závislostí, devDependencies a optionalDependencies
In package.jsonnpm rozlišuje medzi rôznymi typmi závislostí v závislosti od toho, kedy a ako sú potrebné. Správne oddelenie udrží váš produkčný balík štíhly a vaše nástroje flexibilné.
dependencies uvádza balíky potrebné na spustenie vašej aplikácie v produkčnom prostredí. V prípade webovej aplikácie to môže byť Express, Mongoose alebo dokonca samotný nodebbs, ak ho vkladáte ako súčasť vášho serverového stacku.
devDependencies obsahuje balíky, ktoré sú potrebné iba počas vývoja alebo zostavovania, ako napríklad Jest, ESLint, Webpack, Babel alebo Nodemon. Tieto sa neinštalujú pri spustení npm install --production, čo odľahčuje vaše produkčné prostredie.
optionalDependencies obsahuje balíčky, ktoré vylepšujú vašu aplikáciu, ale nie sú striktne povinné. Ak sa voliteľná závislosť nenainštaluje, npm ju nebude považovať za fatálnu chybu; očakáva sa, že váš kód jej absenciu elegantne zvládne.
Vlajky ako napr. --save-prod (Default), --save-dev (Alebo -D), A --save-optional kontrola, kde sa zaznamenáva novo nainštalovaný balík. Historicky existoval explicitný --save vlajka, ale moderné npm zaobchádza npm install <name> ako operácia uloženia do závislostí štandardne.
Semver a inštalácia špecifických verzií balíkov
použitie npm sémantické verziovanie (semver) na správu verzií balíkov, čo je kľúčové, keď ste závislí od zložitých knižníc alebo od balíka ako nodebbs, ktorý sa môže časom vyvíjať. Semver používa vzor MAJOR.MINOR.PATCH (napríklad, 1.4.3).
V semestri, HLAVNÉ číslo prírastky, keď dôjde k prelomovým zmenám, MALÝ pre spätne kompatibilné pridané funkcie a PATCH pre opravy chýb, ktoré by nemali narušiť existujúci kód. Tento model umožňuje vývoj balíkov bez neustáleho narúšania nadväzujúcich aplikácií.
Presnú verziu balíka môžete nainštalovať pomocou npm install package@version, Napríklad npm install express@4.17.1Toto je užitočné, ak chcete uzamknúť svoj projekt na známu a funkčnú verziu, zatiaľ čo nové vydania testujete samostatne.
V package.json, môžete zadať flexibilné rozsahy pomocou znakov ako ^ a ~ alebo použitie "latest" or * aby ste si vždy stiahnutie najnovšej kompatibilnej verzie. Napríklad "express": "^4.1.1" povie npm, aby použil akúkoľvek kompatibilnú verziu 4.x nad 4.1.1, ale nie 5.x.
Globálne balíky a nástroje CLI
Globálne npm balíky sa primárne používajú na inštaláciu nástroje príkazového riadka ktoré chcete mať k dispozícii bez ohľadu na to, na ktorom projekte pracujete. Tieto nástroje registrujú spustiteľné súbory vo vašej ceste PATH, takže ich môžete vyvolať priamo z terminálu.
Medzi príklady užitočných globálnych balíkov patria nodemon pre automatické reštartovanie Node serverov počas vývoja a typescript na kompiláciu TypeScriptu z ľubovoľného miesta na vašom počítači. Inštalácia sa vykonáva pomocou npm install -g <package-name>.
Globálne balíky sú nainštalované, môžete skontrolovať spustením npm list -g --depth=0, ktorý vypíše plochý zoznam globálne dostupných modulov a ich verzií. Toto je užitočné pri audite nastavení alebo ladení problémov s rozhraním príkazového riadka.
Aktualizácia alebo odstránenie globálnych nástrojov funguje rovnako ako lokálne: použite npm update -g <package-name> aktualizovať a npm uninstall -g <package-name> na ich odstránenie. Udržiavanie globálnych nástrojov v aktuálnom stave zabezpečí, že získate najnovšie opravy a bezpečnostné záplaty.
Zoznam, kontrola a audit nainštalovaných balíkov
S rastom vášho projektu je sledovanie nainštalovaných balíkov a ich verzií čoraz dôležitejšie. npm poskytuje príkazy na zoznam a kontrola váš strom závislostí.
npm list zobrazuje hierarchiu lokálne nainštalovaných balíkov v aktuálnom projekte vrátane vnorených závislostí, na ktorých sa vaše priame závislosti spoliehajú. Môžete vidieť, ktoré verzie boli nakoniec nainštalované a ako sú prepojené.
npm list -g funguje podobne, ale pre globálne nainštalované balíky a pridávanie --depth=0 obmedzuje výstup iba na položky najvyššej úrovne. Vďaka tomu zostáva výstup čitateľný, najmä ak je prítomných veľa vnorených závislostí.
Z bezpečnostných dôvodov npm obsahuje funkcia auditubeh npm audit prehľadá váš strom závislostí oproti databáze zraniteľností a vygeneruje správu o známych problémoch – pozri Incident so červom Shai HuludMnohé z nich môžete často opraviť automaticky pomocou npm audit fix, ktorý podľa možnosti presúva verzie závislostí na bezpečné vydania.
Pravidelné audity a aktualizácie drasticky znižujú riziko vystavenia vašej aplikácie známym zraniteľnostiam skrytým v moduloch tretích strán – pozrite si napríklad zosobnenie škodlivého balíka npmToto je obzvlášť dôležité, keď sa spoliehate na veľké balíky, ako napríklad nodebbs čo môže viesť k hlbokému reťazcu závislostí.
Používanie nainštalovaných balíkov vo vašom kóde Node.js
Keď lokálne nainštalujete balík, je pripravený na importovanie do vašej aplikácie Node.js a na použitie rovnako ako akýkoľvek iný modul. Node historicky používal Moduly CommonJS via require(), ale moderné projekty sa často spoliehajú aj na moduly ECMAScript s import.
Pre CommonJS môžete napísať const express = require('express') or const nodebbs = require('nodebbs') na začiatku súboru, aby ste priniesli hlavný export balíka. Odtiaľ použijete jeho zdokumentované API na konfiguráciu trás, middleware alebo v prípad nodebbs, funkcie fóra.
Pre moduly ECMAScript (keď vaše package.json má "type": "module" alebo používate .mjs súbory), namiesto toho to robíte import express from 'express'Mnoho moderných balíkov teraz publikuje zostavenia ESM a Node podporuje oba formáty.
Majte na pamäti, že veľké balíky často zobrazujú viacero vstupných bodov, takže môžete importovať submoduly ako napríklad import { Router } from 'express' or import feature from 'nodebbs/feature.js', v závislosti od toho, ako autor balíka štruktúroval svoje exporty. Tu sa exports pole v balíku package.json sa stáva dôležitým.
npm skripty: automatizácia úloh pomocou package.json
Okrem správy závislostí slúži npm aj ako jednoduchý spúšťač úloh prostredníctvom scripts časť package.jsonSkripty vám umožňujú definovať krátke aliasy pre bežné príkazy, ktoré chcete spúšťať počas vývoja alebo nasadenia.
Základným príkladom je definovanie "start": "node app.js" pod scripts, ktorý potom spustíte pomocou npm startToto je oveľa jednoduchšie na zapamätanie a zdieľanie ako dlhý príkazový riadok a funguje to konzistentne vo všetkých prostrediach.
Môžete nastaviť skripty na spúšťanie testov, vytváranie frontendových prvkov, linting, spúšťanie vývojových serverov, nasadzovanie databáz alebo dokonca orchestrovanie úloh súvisiacich s balíkom, ako napríklad nodebbsNapríklad môžete mať skript na spustenie migrácií databázy pred spustením servera fóra.
npm si vyhradzuje skratky pre start, test, restarta stopale akýkoľvek iný vlastný skript sa spúšťa s npm run <script-name>V podstate npm nastavuje prostredie tak, aby lokálne nainštalované CLI boli na ceste PATH, a preto príkazy ako webpack or jest často fungujú bez úplnej cesty.
Pokročilé vstupné body balíkov: hlavný, export a import
Pre balíky, ktoré publikujete – napríklad hypoteticky nodebbs modul – kontrola toho, ktoré súbory sú viditeľné pre spotrebiteľov, je kľúčová pre stabilitu a bezpečnosť API – incidenty ako preklepy v NPM ilustrovať riziko.
Staršie main pole jednoducho odkazuje na primárny vstupný súbor, napríklad "main": "./index.js"a je podporovaný vo všetkých verziách Node. Spotrebitelia robia require('your-package') tento súbor predvolene získa.
Novšie exports Pole je oveľa výkonnejšie: dokáže definovať viacero vstupných bodov, podporovať podmienený export na základe prostredia alebo modulového systému a blokovať prístup k interným cestám, na ktoré nechcete, aby sa používatelia spoliehali. Keď exports je prítomný, iba explicitne uvedené cesty sú dostupné prostredníctvom holého importu, ako napríklad require('pkg/subpath').
An exports mapa môže špecifikovať koreňový záznam na adrese ".", ďalšie podcesty ako napríklad "./feature"a dokonca aj explicitné odhalenie ./package.json ak je to potrebné. To vám umožňuje starostlivo tvarovať vaše verejné API a zároveň zachovať súkromie detailov implementácie.
Exportovať vzory pomocou * umožňujú vám zobraziť celé priečinky bez toho, aby ste vymenovali každý súbor; napríklad "./lib/*": "./lib/*.js" namapuje všetky zodpovedajúce podcesty. Môžete tiež explicitne blokovať určité podpriečinky ich namapovaním na null, čo bráni spotrebiteľom v importovaní týchto ciest.
Podmienený export a environmentálne uvedomelé zostavenia
Podmienený vývoz vám umožňujú poskytnúť rôzne súbory v závislosti od toho, ako alebo kde sa váš balík používa. Môžete dodať jednu zostavu optimalizovanú pre import (ESM) a ďalší pre require() (CommonJS) alebo dokonca samostatné zostavenia pre Node a prehliadače.
Podmienky ako napr "import", "require", "node", "node-addons", "module-sync"a "default" sa môže objaviť v exports objekt na výber správneho cieľa. Napríklad, "import": "./index-module.js" a "require": "./index-require.cjs" poskytujú duálnu podporu ESM/CommonJS.
Tieto podmienky sa hodnotia v poradí, takže by ste ich mali vymenovať od od najšpecifickejších po najmenej špecifické, končiac s "default" záložný balík pre neznáme prostredia. Toto zabezpečuje, že iné behové prostredia (napríklad zavádzače prehliadačov používajúce mapy importu) môžu váš balík stále využívať.
Uzol vám tiež umožňuje vnorovať podmienky, napríklad mať "node" vetva obsahujúca obe "import" a "require", plus samostatný "default" ktorý sa zameriava na univerzálne zostavenie. Táto flexibilita je obzvlášť užitočná, keď váš balík závisí od natívnych doplnkov v Node, ale inde používa polyfill – pozri Bezpečnosť NPM pod tlakom.
Okrem vstavaných podmienok Node podporuje aj používateľom definované podmienky odovzdávané prostredníctvom node --conditions=<name>a širší ekosystém sa zblížil na kľúčových bodoch, ako sú "browser", "types", "development"a "production" pre špecializovanejšie scenáre. Tieto pomáhajú koordinovať správanie medzi balíkovačmi, kontrolórmi typov a runtime modulmi.
Importy podcest a interné aliasy modulov
Okrem exportssa imports pole v package.json umožňuje definovať súkromné špecifikátory importu, ktoré sú platné iba v rámci samotného balíka. Tieto špecifikátory vždy začínajú s # aby sa predišlo kolíziám s externými balíkmi.
Napríklad by ste mohli mapovať "#dep" na závislosť Node-native v jednom prostredí a polyfill v inom prostredí pomocou podmienených mapovaní pod importsKód vo vašom balíku potom robí import '#dep' a automaticky získa správnu implementáciu.
Vzory podcest sa dajú použiť aj v rámci imports mapovať skupiny interných súborov, ako napríklad "#internal/*.js": "./src/internal/*.js"Vďaka tomu sa vytvárajú čisté a stabilné cesty importu pre interné moduly a refaktoring je ľahko spravovateľný bez toho, aby sa podrobnosti o implementácii odhalili používateľom.
Pravidlá riešenia problémov pre imports zrkadliť tie z exports, vrátane obmedzení, ktoré udržiavajú cesty vo vnútri koreňového adresára balíka a neumožňujú prechod von do node_modulesToto zachováva zapuzdrenie a zabraňuje prekvapivému správaniu.
Ďalšou pokročilou funkciou je samoreferencovanie, ktoré umožňuje kódu v balíku importovať sa podľa názvu, pokiaľ exports mapa je definovaná. Napríklad, ak je váš balík pomenovaný "a-package" a vývoz "." a "./foo.js", interné súbory môžu zapisovať import { something } from 'a-package' a používajú rovnaký vstupný bod, aký dostanú spotrebitelia.
Táto technika sa vyhýba hlbokým relatívnym cestám a zabezpečuje, že interný import vždy odráža hranice verejného API definované exportsFunguje to aj s CommonJS prostredníctvom require('a-package/foo.js') keď sa táto podcesta exportuje.
Funkcie rozlišovania modulov v npm a Node vám poskytujú presnú kontrolu nad tým, ako sú zložité balíky – vrátane nástrojov pre fóra, ako je nodebbs – štruktúrované, distribuované a spotrebované. Zvládnutím inštalačných režimov, správy závislostí, sémantického verziovania, bezpečnostných auditov a pokročilej konfigurácie vstupných bodov pomocou exports a imports, môžete s istotou vytvárať, integrovať a udržiavať sofistikované npm balíky, ktoré zostávajú stabilné a predvídateľné, aj keď sa vaša kódová základňa a ekosystém okolo nej neustále vyvíjajú.