Główna różnica między pakietami lokalnymi i globalnymi jest następująca:
- pakiety lokalne są instalowane w katalogu, w którym uruchamiasz
npm install <package-name>
, i są one umieszczane w folderzenode_modules
pod tym katalogiem - pakiety globalne są wszystkie umieszczane w jednym miejscu w twoim systemie (dokładnie gdzie zależy od twojej konfiguracji), niezależnie od tego, gdzie uruchamiasz
npm install -g <package-name>
W twoim kodzie możesz wymagać tylko pakietów lokalnych:
require('package-name')
więc kiedy powinieneś zainstalować w ten czy inny sposób?
Ogólnie, wszystkie pakiety powinny być zainstalowane lokalnie.
To daje pewność, że możesz mieć dziesiątki aplikacji w swoim komputerze, wszystkie uruchamiające inną wersję każdego pakietu w razie potrzeby.
Aktualizacja globalnego pakietu sprawi, że wszystkie twoje projekty będą używać nowego wydania, i jak możesz sobie wyobrazić, może to powodować koszmary w zakresie konserwacji, ponieważ niektóre pakiety mogą złamać kompatybilność z dalszymi zależnościami, i tak dalej.
Wszystkie projekty mają swoją własną lokalną wersję pakietu, nawet jeśli może się to wydawać marnowaniem zasobów, jest to minimalne w porównaniu do możliwych negatywnych konsekwencji.
Pakiet powinien być zainstalowany globalnie, gdy dostarcza wykonywalną komendę, którą uruchamiasz z powłoki (CLI), i jest ona ponownie używana w różnych projektach.
Możesz również zainstalować wykonywalne komendy lokalnie i uruchamiać je używając npx, ale niektóre pakiety są po prostu lepiej zainstalowane globalnie.
Dobrymi przykładami popularnych globalnych pakietów, które możesz znać są
npm
create-react-app
vue-cli
grunt-cli
mocha
react-native-cli
gatsby-cli
forever
nodemon
.
Prawdopodobnie masz już jakieś pakiety zainstalowane globalnie w swoim systemie. Możesz je zobaczyć uruchamiając
npm list -g --depth 0
w wierszu poleceń.
.