fiskeben şunu yazdı:
Dezavantajı, tam otomatik olmamasıdır, yani package.json'dan paket adlarını çıkarmaz ve kontrol etmez. Bunu her paket için kendiniz yapmanız gerekir.
Herhangi bir nedenle depcheck
düzgün çalışmıyorsa Fiskeben'in cevabını otomatik hale getirelim ! (Örn, Typescript ile denedim ve gereksiz ayrıştırma hataları verdi)
Ayrıştırma package.json
için yazılımı kullanabiliriz jq
. Aşağıdaki kabuk betiği, nereden başlayacağınız için bir dizin adı gerektirir.
#!/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"
İlk olarak, paket adlarını ve dosyalarını önbelleğe alabileceğimiz iki geçici dosya oluşturur.
find
Komut ile başlar . Birinci ve ikinci satır, node_modules
ve build
klasörlerini (veya ne istersen) görmezden gelmesini sağlar . Üçüncü satır izin verilen uzantıları içerir, buraya daha fazlasını ekleyebilirsiniz, örneğin JSX veya JSON dosyaları.
Bir fonksiyon bağımlı tipleri okuyacaktır.
İlk cat
önce package.json
. Ardından, jq
gerekli bağımlılık grubunu alır. ( {} +
örneğin dosyada eş bağımlılığı yoksa hata atmayacak şekilde).
Bundan sonra sed
, tırnak işaretleri arasında paket adı çıkarılır. -n
ve .../p
ona eşleşen parçaları yazdırmasını ve jq
JSON çıkışından başka bir şey yazmamasını söyler . Sonra bu paket adları listesini bir while
döngü halinde okuyoruz .
RES
, paket adının tırnak işareti cinsinden tekrar sayısıdır. Şu anda import
/ require
... 'package'
/ "package"
. Çoğu durumda bu işi yapar.
Sonra sonuç satırlarının sayısını sayarız ve sonucu yazdırırız.
Uyarılar:
- Farklı içe aktarmalardaki
tsconfig.json
dosyaları bulamazlar, örneğin dosyalar (lib
isteğe bağlı)
grep
Sadece ^USED
ve UNUSED
dosyalar için manuel olarak yapmanız gerekir .
- Büyük projeler için yavaştır - kabuk komut dosyaları genellikle iyi ölçeklenmez. Ama umarım bunu birçok kez çalıştırmazsınız.