Czy istnieje sposób, aby po prostu odinstalować wszystkie nieużywane (niezadeklarowane) zależności z projektu Node.js (te, które nie są już zdefiniowane w moim pliku package.json
). Gdy aktualizuję aplikację, chcę, aby pakiety, do których się nie odwoływałem, były automatycznie usuwane.
414
node_modules
gdy są usuwane z odpowiednichpackage.json
?Odpowiedzi:
Uwaga : Najnowsze
npm
wersje robią to automatycznie, gdy włączone są blokady pakietów, więc nie jest to konieczne, z wyjątkiem usuwania pakietów programistycznych z--production
flagą.Uruchom,
npm prune
aby usunąć moduły niewymienione wpackage.json
.Od
npm help prune
:źródło
package.json
. Czy to prawda? Tak więc następna aktualizacja lub instalacja musiałaby je ponownie zainstalować.node_modules
katalogu modułu , więc są usuwane wraz z modułem.package.json
, ale zostawiam altanę. Kiedy uruchamiamnpm prune
, oczekuję, że cała karma, w tym własnynode_modules
folder zawierający zależności, zostanie usunięta. Co z zależnościami bowera (bower-json, bower-logger, chmodr, fstream, glob i in.). Technicznie nie są one wymienione w moim projekciepackage.json
. Czy zostały usunięte, czy nie?node_modules
, ale wewnątrznode_modules/bower/node_modules
, „chronione” przeznode_modules/bower/package.json
. Zależności pakietu i zależności pakietu nie są mieszane .Jeśli nie martwisz się o kilka minut czasu, aby to zrobić, to rozwiązanie byłoby
rm -rf node_modules
inpm install
ponownie odbudować lokalnych modułów.źródło
node_modules
sprawdza również, czypackage.json
plik opisuje odtwarzalny wykres zależności. Usunięcie i ponowna instalacjanode_modules
jest w zasadzie testem wdrożenia.npm prune
nie pomogło ani jota, ale to pomogło. Mój problem to zepsute dowiązanie symboliczne.Możesz użyć npm-prune do usunięcia obcych pakietów.
To polecenie usuwa „obce” pakiety. Jeśli podano nazwę pakietu, usuwane są tylko pakiety pasujące do jednej z podanych nazw.
Zewnętrzne pakiety to pakiety, które nie są wymienione na liście zależności pakietów nadrzędnych.
Jeśli --production flaga jest określona lub NODE_ENV zmienna jest ustawiona do produkcji , to polecenie usunie pakiety podany w devDependencies . Ustawienie - brak produkcji spowoduje zanegowanie ustawienia NODE_ENV na produkcję .
Jeśli zostanie użyta flaga --dry-run, wówczas nie zostaną wprowadzone żadne zmiany.
Jeśli użyta jest flaga --json, zmiany dokonane npm przycinania (lub zostałyby wykonane za pomocą --dry-run ) są drukowane jako obiekt JSON.
W normalnej pracy z włączonymi blokadami pakietów, dodatkowe moduły są automatycznie przycinane po zainstalowaniu modułów i będziesz potrzebować tylko tego polecenia z flagą --production .
Jeśli wyłączyłeś blokady pakietów, wówczas zewnętrzne moduły nie zostaną usunięte i od czasu do czasu musisz je uruchomić npm prune .
Użyj npm-dedupe, aby zmniejszyć powielanie
Przeszukuje lokalne drzewo pakietów i próbuje uprościć ogólną strukturę, przenosząc zależności dalej w górę drzewa, gdzie mogą być efektywniej współużytkowane przez wiele zależnych pakietów.
Weźmy na przykład ten wykres zależności:
W takim przypadku npm-dedupe przekształci drzewo w:
Z powodu hierarchicznej natury wyszukiwania modułu węzła, b i d uzyskają swoją zależność od pojedynczego pakietu c na poziomie katalogu głównego drzewa.
Algorytm deduplikacji idzie po drzewie, przesuwając każdą zależność tak wysoko w drzewie, jak to możliwe, nawet jeśli nie znaleziono duplikatów. Spowoduje to zarówno płaskie, jak i deduplikowane drzewo.
źródło