fiskeben napisał:
Minusem jest to, że nie jest w pełni automatyczny, tzn. Nie wyodrębnia nazw pakietów z package.json i nie sprawdza ich. Musisz to zrobić sam dla każdego pakietu.
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ć oprogramowania jq
. Poniższy skrypt powłoki wymaga nazwy katalogu, od którego ma się zacząć.
#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME
FILES=$(mktemp)
PACKAGES=$(mktemp)
find . \
-path ./node_modules -prune -or \
-path ./build -prune -or \
\( -name "*.ts" -or -name "*.js" -or -name "*.json" \) -print > $FILES
function check {
cat package.json \
| jq "{} + .$1 | keys" \
| sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
echo "--------------------------"
echo "Checking $1..."
while read PACKAGE
do
RES=$(cat $FILES | xargs -I {} egrep -i "(import|require).*['\"]$PACKAGE[\"']" '{}' | wc -l)
if [ $RES = 0 ]
then
echo -e "UNUSED\t\t $PACKAGE"
else
echo -e "USED ($RES)\t $PACKAGE"
fi
done < $PACKAGES
}
check "dependencies"
check "devDependencies"
check "peerDependencies"
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 foldery node_modules
i build
(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
s package.json
. Następnie jq
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 z jq
wyjścia JSON. Następnie czytamy listę nazw pakietów w while
pętli.
RES
to liczba wystąpień nazwy pakietu w cudzysłowie. W tej chwili jest to import
/ 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:
- Nie znajdzie plików w różnych importach, np.
tsconfig.json
Plikach (lib
opcja)
- Musisz
grep
ręcznie tylko dla plików ^USED
i UNUSED
plików.
- Jest duży w przypadku dużych projektów - skrypty powłoki często nie skalują się dobrze. Ale miejmy nadzieję, że nie uruchomisz tego wiele razy.