Czy istnieje sposób, aby ustalić, czy w pliku package.json znajdują się pakiety, które nie są już potrzebne?
Na przykład podczas wypróbowywania pakietu, a następnie komentowania lub usuwania kodu, ale zapominając o jego odinstalowaniu, otrzymuję kilka pakietów, które można usunąć.
Jaki byłby skuteczny sposób ustalenia, czy pakiet można bezpiecznie usunąć?
node.js
dependencies
npm
Josh C.
źródło
źródło
depcheck
wyświetla każdą paczkę,unused
która jest po prostu złanpx depcheck
Istnieje również pakiet o nazwie
npm-check
:Jest dość potężny i aktywnie rozwijany. Jedną z jego funkcji jest sprawdzanie nieużywanych zależności - w tej części wykorzystuje
depcheck
moduł wymieniony w drugiej odpowiedzi.źródło
npm outdated
sprawdza i wyświetla aktualne, poszukiwane i najnowsze wersje pakietów. Brak listy nieużywanych pakietów.Jeśli używasz systemu operacyjnego typu Unix (Linux, OSX itp.), Możesz użyć kombinacji
find
i,egrep
aby wyszukać instrukcje wymagane zawierające nazwę pakietu:Jeśli szukasz całej
require('name-of-package')
instrukcji, pamiętaj, aby używać poprawnego rodzaju znaków cudzysłowu:lub
Minusem jest to, że nie jest w pełni automatyczny, tzn. Nie wyodrębnia nazw pakietów
package.json
i nie sprawdza ich. Musisz to zrobić sam dla każdego pakietu. Ponieważpackage.json
jest to po prostu JSON, można temu zaradzić, pisząc mały skrypt, który używachild_process.exec
do uruchomienia tego polecenia dla każdej zależności. I uczyń z niego moduł. I dodaj go do repozytorium NPM ...źródło
.jsx
plikami i.ts
plikami itp .: Dfiskeben napisał:
Zróbmy automatyczną odpowiedź Fiskeben, jeśli z jakiegokolwiek powodu
depcheck
nie działa poprawnie! (Np. Próbowałem z Typescript i dało to niepotrzebne błędy analizy)Do parsowania
package.json
możemy użyć oprogramowaniajq
. Poniższy skrypt powłoki wymaga nazwy katalogu, od którego ma się zacząć.Najpierw tworzy dwa pliki tymczasowe, w których możemy buforować nazwy pakietów i pliki.
Zaczyna się od
find
polecenia. Pierwszy i drugi wiersz powodują, że ignoruje folderynode_modules
ibuild
(lub cokolwiek chcesz). Trzeci wiersz zawiera dozwolone rozszerzenia, możesz dodać tutaj więcej, np. Pliki JSX lub JSON.Funkcja odczytuje typy zależne.
Najpierw
cat
spackage.json
. Następniejq
pobiera wymaganą grupę zależności. ({} +
czy istnieje, aby nie zgłaszał błędu, jeśli np. w pliku nie ma zależności równorzędnych).Następnie
sed
wyodrębnia części między cudzysłowami, nazwę pakietu.-n
i.../p
każe mu wydrukować pasujące części i nic więcej zjq
wyjścia JSON. Następnie czytamy listę nazw pakietów wwhile
pętli.RES
to liczba wystąpień nazwy pakietu w cudzysłowie. W tej chwili jest toimport
/require
...'package'
/"package"
. W większości przypadków spełnia swoje zadanie.Następnie po prostu zliczamy liczbę linii wyniku, a następnie drukujemy wynik.
Ostrzeżenia:
tsconfig.json
Plikach (lib
opcja)grep
ręcznie tylko dla plików^USED
iUNUSED
plików.źródło
W tym celu możemy użyć poniższego modułu npm:
https://www.npmjs.com/package/npm-check-unused
źródło
wiele odpowiedzi tutaj to jak znaleźć nieużywane przedmioty.
Chciałem je usunąć automatycznie .
Zainstaluj ten projekt węzła.
$ npm install -g typescript tslint tslint-etc
W katalogu głównym dodaj nowy plik tslint-imports.json
{ "extends": [ "tslint-etc" ], "rules": { "no-unused-declaration": true } }
Uruchom to na własne ryzyko, wykonaj kopię zapasową :)
$ tslint --config tslint-imports.json --fix --project .
źródło
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm