- npm pełni funkcję zarówno ogromnego rejestru pakietów, jak i podstawowego narzędzia CLI do instalowania, aktualizowania, usuwania i audytu zależności Node.js.
- Projekty wykorzystują plik package.json do definiowania zależności, skryptów i punktów wejścia za pomocą pól takich jak main, exports, imports i type.
- Instalacje lokalne i globalne, zakresy semver i typy zależności (dependencies, devDependencies, optionalDependencies) kontrolują sposób i miejsce używania pakietów.
- Zaawansowane eksporty, eksporty warunkowe i importy podścieżek zapewniają szczegółową kontrolę nad tym, co pakiet taki jak nodebbs udostępnia różnym środowiskom.
Jeśli próbujesz zrozumieć, jak pakiet npm taki jak „nodebbs” aby dopasować się do ekosystemu Node.js, najpierw musisz mieć solidną wiedzę na temat co to jest npm, jak zbudowane są pakiety oraz jak Node rozwiązuje i udostępnia moduły. Nowoczesne projekty Node.js w dużym stopniu opierają się na npm, nie tylko do instalowania kodu, ale także do zarządzania skryptami, bezpieczeństwem, wersjonowaniem i sposobem, w jaki Twój pakiet jest wykorzystywany przez innych.
Ten przewodnik przeprowadzi Cię przez npm od podstaw — co to jest, jak działają pakiety lokalne i globalne, jak je instalować, aktualizować i usuwać, jak package.json jest ustrukturyzowany i jak zaawansowane funkcje, takie jak exports oraz imports Pola kontrolują, co Twój pakiet (na przykład silnik forum, taki jak nodebbs) udostępnia użytkownikom. Wszystko jest wyjaśnione prostym językiem i zawiera mnóstwo przykładów, dzięki czemu możesz śmiało publikować i używać pakietów npm.
Czym jest npm i dlaczego ma znaczenie dla pakietów takich jak nodebbs
npm (Menedżer pakietów węzłów) to zarówno narzędzie wiersza poleceń, jak i ogromny internetowy rejestr pakietów Node.js o otwartym kodzie źródłowym. Podczas instalacji Node.js w systemie, npm instaluje się automatycznie, zapewniając natychmiastowy dostęp do milionów modułów wielokrotnego użytku opublikowanych przez społeczność. npmjs.com.
rejestr npm to w zasadzie największe na świecie repozytorium kodu w jednym języku, z ponad milionem opublikowanych pakietów, które obejmują niemal każde możliwe zadanie. Pakiety te obejmują zarówno drobne narzędzia (pojedyncza funkcja), jak i kompletne frameworki, interfejsy wiersza poleceń (CLI) i szkielety aplikacji, które napędzają codzienne działanie aplikacji produkcyjnych.
Początkowo npm został zaprojektowany Służy wyłącznie do zarządzania zależnościami w projektach Node.js w zapleczu, ale obecnie jest również podstawowym narzędziem dla frontendowych przepływów pracy. Można zainstalować Reacta, narzędzia takie jak Webpack czy Vite, frameworki CSS, narzędzia do uruchamiania testów i wiele innych – wszystko dystrybuowane jako pakiety npm.
Podczas pracy z konkretnym pakietem, takim jak nodebbs, npm jest odpowiedzialny za pobieranie swojego kodu, rozwiązując jego zależności, utrzymując spójność wersji w całym zespole i łącząc wszelkie skrypty lub interfejsy wiersza poleceń, które udostępnia. Dlatego zrozumienie npm jest niezbędne, jeśli chcesz samodzielnie oceniać, dostosowywać, a nawet publikować pakiet — zobacz szeroko rozpowszechniony atak na łańcuch dostaw npm.
Node.js, npm i jak je zainstalować
Aby użyć dowolnego pakietu npm — w tym nodebbs — potrzebujesz Zainstalowano Node.js i npm na Twoim komputerze. npm jest dołączony do Node, więc wystarczy zainstalować Node z oficjalnej strony i gotowe.
Zalecanym podejściem jest instalacja Node.js za pomocą menedżera wersji, takiego jak nvm, który umożliwia przełączanie się między wieloma wersjami Node i npm. Ułatwia to testowanie projektu z różnymi wersjami Node i pozwala uniknąć problemów z uprawnieniami, które mogą wystąpić w instalatorach systemowych.
Możesz szybko sprawdzić, czy Węzeł i npm są już obecne otwierając terminal i uruchamiając: node -v aby sprawdzić wersję węzła i npm -v aby potwierdzić wersję npm.
Jeśli brakuje Node.js lub Twoja wersja jest zbyt stara, pobierz Wersja z długoterminowym wsparciem (LTS) od nodejs.org dla Twojego systemu operacyjnego. W systemach Windows i macOS instalator konfiguruje wszystko; w systemie Linux możesz użyć NodeSource lub metody preferowanej przez dystrybucję, albo ponownie menedżera wersji, takiego jak nvm.
Podstawowe koncepcje npm: pakiety, moduły i rejestr
W świecie Node.js, "pakiet" to pakiet kodu zawierający wszystko, co potrzebne do modułu lub aplikacji: pliki JavaScript, metadane, dokumentację, a czasem artefakty kompilacji. Pakiety zazwyczaj znajdują się w katalogu z package.json plik opisujący ich zawartość.
A "moduł" jest jednostką kodu, którą można zaimportować do Node.js za pomocą require() or importPakiet npm zazwyczaj udostępnia jeden lub więcej modułów do użytku konsumentów. Na przykład biblioteka narzędziowa może eksportować pojedynczy moduł główny, podczas gdy złożony pakiet, taki jak nodebbs, może udostępniać wiele punktów wejścia dla części serwerowej i klienckiej.
Pakiety są publikowane publicznie rejestr npm (lub do prywatnych rejestrów), aby inni programiści mogli je zainstalować za pomocą prostego polecenia. W tle npm pobiera pliki, weryfikuje drzewo zależności i zapisuje wszystko w node_modules folder, aby Twoja aplikacja mogła go zaimportować.
Popularne przykłady pakietów npm obejmują struktury takie jak Express, React i Vue, narzędzia takie jak Lodash i Chalk, narzędzia pomocnicze takie jak Mongoose i Socket.io oraz narzędzia takie jak Jest, Webpack, Babel, Nodemon i Axios. Pakiet taki jak nodebbs będzie do nich dołączony jako kolejna instalowalna zależność, którą można podłączyć do stosu aplikacji.
Praca z npm na wierszu poleceń
interfejs wiersza poleceń npm (CLI) To sposób instalowania, usuwania, aktualizowania i sprawdzania pakietów, a także uruchamiania skryptów projektu. W systemie Windows zazwyczaj otwiera się wiersz poleceń lub program PowerShell; w systemach macOS i Linux należy korzystać z terminala.
Niektóre z najczęściej używanych poleceń npm to: npm install, npm uninstall, npm update, npm init, npm start, npm test, npm publishŁącznie polecenia te obejmują niemal wszystko, czego potrzebujesz do zarządzania zależnościami projektu Node.js i zadaniami cyklu życia.
Aby zainstalować nowy pakiet lokalnie w swoim projekcie, zazwyczaj należy uruchomić npm install <package-name> z katalogu głównego projektu. To pobiera pakiet do node_modules i przy użyciu nowoczesnego npm automatycznie dodaje wpis pod dependencies in package.json.
Instalacje globalne, wykorzystujące npm install -g <package-name>, są zarezerwowane dla narzędzi, które chcesz mieć dostępne wszędzie w swoim systemie — takich jak nodemon, typescriptlub innych interfejsów CLI. Biblioteki na poziomie aplikacji (w tym nodebbs) prawie zawsze należą do lokalnych dependencies zamiast.
Inicjowanie projektu Node i rola pliku package.json
Każdy poważny projekt Node.js zaczyna się od package.json Plik, który działa jak manifest Twojej aplikacji lub biblioteki. Przechowuje metadane (nazwę, wersję, opis), skrypty, zależności i informacje o sposobie ładowania pakietu.
Plik ten tworzysz poprzez uruchomienie npm init w pustym folderze, a następnie odpowiedz na kilka pytań dotyczących projektu. Jeśli wolisz pominąć pytania, npm init -y generuje minimalne package.json z rozsądnymi domyślnymi ustawieniami, które możesz później edytować.
Pewnego razu package.json istnieje, każdy instalowany pakiet jest rejestrowany pod dependencies, devDependencieslub inne dedykowane sekcje. To właśnie pozwala innemu programiście sklonować Twoje repozytorium i po prostu uruchomić npm install aby przywrócić pełne drzewo zależności.
W przypadku pakietu takiego jak nodebbs, który możesz chcieć opublikować, package.json deklaruje również nazwę pakietu, punkty wejścia i wszelkie pola takie jak main, exportslub type które kontrolują sposób, w jaki Node rozwiązuje swoje moduły. To sprawia, package.json jest kluczowy zarówno dla konsumpcji, jak i produkcji pakietów npm.
Instalacja lokalna a globalna pakietów npm
Pakiety lokalne są instalowane w bieżącym projekcie node_modules katalogu i są dostępne tylko w ramach tego projektu. Po uruchomieniu npm install express or npm install nodebbs w folderze projektu pakiet staje się częścią grafu zależności tej aplikacji.
Ta lokalna strategia instalacji zapobiega konflikty wersji między projektami Ponieważ każdy projekt utrzymuje własne kopie zależności. Jedna aplikacja może korzystać z Express 4, a inna z Express 5, i nie będą one ze sobą kolidować.
Pakiety globalne instalowane za pomocą npm install -g, są umieszczane w lokalizacji systemowej i zazwyczaj udostępniają narzędzia wiersza poleceń. Można ich używać do nodemon, typescriptlub dla generatorów projektów globalnych, ale rzadko chcesz, aby kod aplikacji, taki jak nodebbs, był globalny.
npm pozwala również zmienić globalny prefiks instalacji za pomocą npm config set prefix <path>, co jest przydatne, jeśli nie masz uprawnień administratora lub chcesz uniknąć błędów uprawnień podczas instalowania globalnych interfejsów wiersza poleceń. W ten sposób Twoje globalne narzędzia znajdują się w katalogu z możliwością zapisu przez użytkownika.
Zarządzanie zależnościami: instalacja, aktualizacja i usuwanie
W codziennej pracy będziesz spędzać dużo czasu dodawanie, aktualizowanie i okazjonalne usuwanie zależności npm. npm udostępnia proste polecenia dla każdej z tych operacji, zarówno lokalnie, jak i globalnie.
Instalacja wszystkich zależności w istniejącym projekcie jest tak prosta, jak uruchomienie npm install w katalogu gdzie package.json żyje. npm odczytuje listę zależności i devDependencies i tworzy ją ponownie node_modules odpowiednio folder.
Aby dodać pojedynczą zależność, należy uruchomić npm install <package-name> (lub npm i <package-name> w skrócie), opcjonalnie z flagami takimi jak --save-dev, --save-optionallub --no-saveTe flagi kontrolują, czy pakiet ma być rejestrowany jako zwykła zależność, zależność wyłącznie na potrzeby środowiska programistycznego, czy też nie ma być rejestrowany wcale.
Aktualizowanie zależności można przeprowadzić w całym projekcie za pomocą npm update, która aktualizuje pakiety do nowszych wersji, które nadal spełniają zakresy wersji w package.jsonMożesz również wybrać pojedynczy pakiet npm update <package-name>lub dodaj -g jeśli aktualizujesz narzędzie globalne.
Odinstalowywanie pakietu jest symetryczne: npm uninstall <package-name> usuwa to z node_modules i sprząta package.json wpis. Korzystanie npm uninstall -g robi to samo dla pakietów zainstalowanych globalnie.
Zrozumienie zależności, zależności deweloperskich i zależności opcjonalnych
In package.jsonNPM rozróżnia różne typy zależności w zależności od tego, kiedy i jak są potrzebne. Prawidłowe rozdzielenie pozwala zachować prostotę pakietu produkcyjnego i elastyczność narzędzi.
dependencies Zawiera listę pakietów wymaganych do uruchomienia aplikacji w środowisku produkcyjnym. W przypadku aplikacji internetowej może to być Express, Mongoose, a nawet sam nodebbs, jeśli jest on osadzony w stosie serwera.
devDependencies Zawiera pakiety potrzebne tylko podczas tworzenia lub kompilacji, takie jak Jest, ESLint, Webpack, Babel czy Nodemon. Nie są one instalowane podczas uruchamiania. npm install --production, co sprawia, że środowisko produkcyjne staje się lżejsze.
optionalDependencies Zawiera pakiety, które wzbogacają Twoją aplikację, ale nie są absolutnie wymagane. Jeśli instalacja opcjonalnej zależności nie powiedzie się, npm nie potraktuje tego jako błędu krytycznego; Twój kod powinien poprawnie obsłużyć jej brak.
Flagi takie jak --save-prod (Domyślne) --save-dev (lub -D), A --save-optional Kontroluj, gdzie zapisywany jest nowo zainstalowany pakiet. Historycznie istniała wyraźna --save flaga, ale nowoczesne npm traktuje npm install <name> domyślnie jako operacja zapisywania do zależności.
Semver i instalowanie określonych wersji pakietów
npm używa wersjonowanie semantyczne (semver) do zarządzania wersjami pakietów, co jest kluczowe, gdy polegasz na złożonych bibliotekach lub pakiecie takim jak nodebbs, który może ewoluować w czasie. Semver używa tego wzorca MAJOR.MINOR.PATCH (na przykład, 1.4.3).
W semver, GŁÓWNY numer zwiększa się, gdy występują zmiany powodujące przerwanie działania, MNIEJSZY w celu dodania funkcji zapewniających wsteczną kompatybilność oraz ŁATA w celu wprowadzenia poprawek błędów, które nie powinny psuć istniejącego kodu. Ten model pozwala na ewolucję pakietów bez ciągłego zakłócania działania aplikacji podrzędnych.
Możesz zainstalować dokładną wersję pakietu za pomocą npm install package@version, Na przykład npm install express@4.17.1. Jest to przydatne, jeśli chcesz zablokować projekt na znanej dobrej wersji, podczas gdy osobno testujesz nowe wydania.
W ciągu package.json, możesz określić elastyczne zakresy, używając znaków takich jak ^ oraz ~ albo użyj "latest" or * aby zawsze pobierać najnowszą kompatybilną wersję. Na przykład, "express": "^4.1.1" informuje npm, aby używał dowolnej wersji 4.x zgodnej z wersją 4.x powyżej 4.1.1, ale nie 5.x.
Pakiety globalne i narzędzia CLI
Globalne pakiety npm służą głównie do instalacji narzędzia wiersza poleceń które chcesz mieć dostępne niezależnie od projektu, nad którym pracujesz. Te narzędzia rejestrują pliki wykonywalne w zmiennej środowiskowej PATH, dzięki czemu możesz je wywołać bezpośrednio z terminala.
Przykłady przydatnych pakietów globalnych obejmują: nodemon do automatycznego ponownego uruchamiania serwerów Node podczas tworzenia i typescript do kompilacji TypeScript z dowolnego miejsca na komputerze. Instalacja odbywa się za pomocą npm install -g <package-name>.
Możesz sprawdzić, które pakiety globalne są zainstalowane, uruchamiając npm list -g --depth=0, który wyświetla płaską listę globalnie dostępnych modułów i ich wersji. Jest to przydatne podczas audytu konfiguracji lub debugowania problemów z interfejsem CLI.
Aktualizacja lub usuwanie narzędzi globalnych działa w ten sam sposób, co narzędzi lokalnych: użyj npm update -g <package-name> zaktualizować i npm uninstall -g <package-name> aby je usunąć. Aktualizowanie globalnych narzędzi gwarantuje dostęp do najnowszych poprawek i łatek bezpieczeństwa.
Wyświetlanie listy, sprawdzanie i audyt zainstalowanych pakietów
W miarę rozwoju projektu śledzenie zainstalowanych pakietów i używanych przez nie wersji staje się coraz ważniejsze. npm udostępnia polecenia, wylistować i sprawdzić Twoje drzewo zależności.
npm list Pokazuje hierarchię lokalnie zainstalowanych pakietów w bieżącym projekcie, w tym zagnieżdżone zależności, na których opierają się Twoje bezpośrednie zależności. Możesz zobaczyć, które wersje zostały ostatecznie zainstalowane i jak są one połączone.
npm list -g działa podobnie, ale w przypadku pakietów zainstalowanych globalnie i dodawania --depth=0 ogranicza dane wyjściowe tylko do wpisów najwyższego poziomu. Dzięki temu dane wyjściowe są czytelne, zwłaszcza gdy występuje wiele zagnieżdżonych zależności.
Ze względów bezpieczeństwa npm zawiera funkcja audytu: działanie npm audit skanuje drzewo zależności w bazie danych luk w zabezpieczeniach i generuje raport o znanych problemach — zobacz Incydent z robakiem Shai Hulud. Często można naprawić wiele z nich automatycznie za pomocą npm audit fix, która w miarę możliwości przesuwa wersje zależności do bezpiecznych wydań.
Regularne audyty i aktualizacje znacznie zmniejszają ryzyko narażenia aplikacji na znane luki w zabezpieczeniach ukryte w modułach innych firm — na przykład zobacz złośliwe podszywanie się pod pakiet npmJest to szczególnie istotne, gdy korzystasz z dużych pakietów, takich jak nodebbs co może prowadzić do głębokiego łańcucha zależności.
Korzystanie z zainstalowanych pakietów w kodzie Node.js
Po zainstalowaniu pakietu lokalnie jest on gotowy do zaimportowania do aplikacji Node.js i używania go jak każdego innego modułu. Historycznie Node używał Moduły CommonJS przez require(), ale współczesne projekty często opierają się również na modułach ECMAScript z import.
W przypadku CommonJS możesz napisać const express = require('express') or const nodebbs = require('nodebbs') na górze pliku, aby pobrać główny eksport pakietu. Następnie możesz użyć udokumentowanego interfejsu API do skonfigurowania tras, oprogramowania pośredniczącego lub… sprawa nodebbsa, funkcje forum.
W przypadku modułów ECMAScript (gdy Twój package.json ma "type": "module" lub używasz .mjs pliki), zamiast tego robisz import express from 'express'Wiele nowoczesnych pakietów publikuje teraz kompilacje ESM, a Node obsługuje oba formaty.
Należy pamiętać, że duże pakiety często udostępniają wiele punktów wejścia, dlatego można importować podmoduły, takie jak import { Router } from 'express' or import feature from 'nodebbs/feature.js', w zależności od tego, jak autor pakietu ustrukturyzował swoje eksporty. To tutaj exports pole w pakiecie package.json staje się ważny.
Skrypty npm: automatyzacja zadań za pomocą pliku package.json
Oprócz zarządzania zależnościami npm pełni również funkcję prostego narzędzia do uruchamiania zadań poprzez scripts odcinek package.jsonSkrypty umożliwiają definiowanie krótkich aliasów dla typowych poleceń, które chcesz uruchomić podczas tworzenia lub wdrażania.
Podstawowym przykładem jest zdefiniowanie "start": "node app.js" dla scripts, który następnie uruchamiasz za pomocą npm startJest to rozwiązanie o wiele łatwiejsze do zapamiętania i udostępniania niż długi wiersz poleceń, a ponadto działa spójnie w różnych środowiskach.
Możesz skonfigurować skrypty do uruchamiania testów, tworzenia zasobów front-end, lintingu, uruchamiania serwerów programistycznych, inicjowania baz danych, a nawet organizowania zadań związanych z pakietem, takim jak nodebbsNa przykład możesz mieć skrypt, który uruchomi migrację bazy danych przed uruchomieniem serwera forum.
npm rezerwuje skróty dla start, test, restart, stopale każdy inny niestandardowy skrypt jest uruchamiany z npm run <script-name>. W tle npm konfiguruje środowisko tak, aby lokalnie zainstalowane interfejsy CLI znajdowały się w ścieżce PATH, dlatego polecenia takie jak webpack or jest często działają bez pełnej ścieżki.
Zaawansowane punkty wejścia pakietów: główny, eksportowy i importowy
W przypadku pakietów, które publikujesz — na przykład hipotetycznych nodebbs moduł — kontrolowanie, które pliki są widoczne dla konsumentów, ma kluczowe znaczenie dla stabilności i bezpieczeństwa API — incydenty takie jak npm typosquatting zilustrować ryzyko.
Starszy main pole po prostu wskazuje na podstawowy plik wejściowy, taki jak "main": "./index.js"i jest obsługiwany we wszystkich wersjach Node. Konsumenci robią require('your-package') otrzyma ten plik domyślnie.
Nowszy exports Pole jest znacznie bardziej wydajne: może definiować wiele punktów wejścia, obsługiwać eksport warunkowy w oparciu o środowisko lub system modułów oraz blokować dostęp do ścieżek wewnętrznych, z których użytkownicy nie powinni korzystać. exports jest obecny, dostępne są tylko ścieżki wyraźnie wymienione poprzez importy takie jak require('pkg/subpath').
An exports mapa może określać wpis główny w ".", dodatkowe podścieżki takie jak "./feature"i nawet jawne ujawnienie ./package.json w razie potrzeby. Dzięki temu możesz ostrożnie kształtować publiczną powierzchnię API, zachowując jednocześnie prywatność szczegółów implementacji.
Eksportuj wzorce z * pozwalają na udostępnianie całych folderów bez konieczności wyświetlania listy każdego pliku; na przykład, "./lib/*": "./lib/*.js" zmapuje wszystkie pasujące podścieżki. Możesz również jawnie zablokować określone podfoldery, mapując je na null, co uniemożliwia konsumentom importowanie tych ścieżek.
Eksporty warunkowe i kompilacje uwzględniające środowisko
Eksport warunkowy pozwalają na dostarczanie różnych plików w zależności od sposobu i miejsca użytkowania pakietu. Możesz wysłać jedną kompilację zoptymalizowaną pod kątem import (ESM) i inny dla require() (CommonJS) lub nawet osobne kompilacje dla Node i przeglądarek.
Warunki takie jak "import", "require", "node", "node-addons", "module-sync", "default" może pojawić się w exports obiekt, aby wybrać właściwy cel. Na przykład, "import": "./index-module.js" oraz "require": "./index-require.cjs" zapewniają podwójne wsparcie ESM/CommonJS.
Warunki te oceniane są w kolejności, dlatego należy je wymienić w kolejności najbardziej szczegółowe do najmniej szczegółowego, kończąc na "default" Zapasowy dla nieznanych środowisk. Dzięki temu inne środowiska wykonawcze (na przykład programy ładujące przeglądarki korzystające z map importu) nadal będą mogły korzystać z Twojego pakietu.
Węzeł umożliwia również zagnieżdżanie warunków, takich jak posiadanie "node" gałąź zawierająca oba "import" oraz "require", plus osobne "default" który ma na celu uniwersalną kompilację. Ta elastyczność jest szczególnie przydatna, gdy pakiet zależy od natywnych dodatków w Node, ale używa polyfilla w innym miejscu — zobacz bezpieczeństwo npm pod presją.
Oprócz wbudowanych warunków Node obsługuje warunki zdefiniowane przez użytkownika przekazywane za pośrednictwem node --conditions=<name>, a szerszy ekosystem skupił się na takich kluczach jak "browser", "types", "development", "production" dla bardziej wyspecjalizowanych scenariuszy. Pomagają one koordynować działanie pakietów, modułów sprawdzających typy i środowisk wykonawczych.
Importy podścieżek i wewnętrzne aliasy modułów
Oprócz exportsThe imports pole w package.json Umożliwia definiowanie prywatnych specyfikatorów importu, które obowiązują tylko wewnątrz samego pakietu. Te specyfikatory zawsze zaczynają się od # aby uniknąć kolizji z pakietami zewnętrznymi.
Na przykład możesz mapować "#dep" do zależności natywnej dla węzła w jednym środowisku i polyfill w innym przy użyciu mapowań warunkowych w ramach imports. Kod wewnątrz pakietu wykonuje następujące czynności: import '#dep' i automatycznie otrzymuje odpowiednią implementację.
Wzory podścieżek można również stosować w imports do mapowania grup plików wewnętrznych, takich jak "#internal/*.js": "./src/internal/*.js". Dzięki temu powstają czyste, stabilne ścieżki importu dla modułów wewnętrznych, a refaktoryzacje są łatwe w zarządzaniu, bez ujawniania użytkownikom szczegółów implementacji.
Zasady rozstrzygania sporów imports odzwierciedlać te z exports, w tym ograniczenia, które utrzymują ścieżki wewnątrz katalogu głównego pakietu i nie pozwalają na przechodzenie do niego node_modulesDzięki temu zachowana jest hermetyzacja, a zachowanie jest nieoczekiwane.
Odwoływanie się do samego siebie to kolejna zaawansowana funkcja, która pozwala kodowi wewnątrz pakietu importować się według nazwy, o ile exports mapa jest zdefiniowana. Na przykład, jeśli Twój pakiet ma nazwę "a-package" i eksport "." oraz "./foo.js", pliki wewnętrzne mogą zapisywać import { something } from 'a-package' i korzystają z tego samego punktu wejścia, co konsumenci.
Ta technika pozwala uniknąć głębokich ścieżek względnych i zapewnia, że wewnętrzne importy zawsze odzwierciedlają publiczne granice API zdefiniowane przez exports. Działa również z CommonJS za pośrednictwem require('a-package/foo.js') gdy ta podścieżka jest eksportowana.
Funkcje rozdzielczości modułów npm i Node'a Zapewniamy ścisłą kontrolę nad strukturą, dystrybucją i wykorzystaniem złożonych pakietów — w tym silników forum, takich jak nodebbs. Dzięki opanowaniu trybów instalacji, zarządzania zależnościami, wersjonowania semantycznego, audytów bezpieczeństwa i zaawansowanej konfiguracji punktu wejścia exports oraz importsmożesz śmiało tworzyć, integrować i utrzymywać zaawansowane pakiety npm, które pozostaną stabilne i przewidywalne w miarę rozwoju bazy kodu i otaczającego ją ekosystemu.