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 depcheckdü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.jsoniç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.
findKomut ile başlar . Birinci ve ikinci satır, node_modulesve buildklasö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, jqgerekli 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. -nve .../pona eşleşen parçaları yazdırmasını ve jqJSON çıkışından başka bir şey yazmamasını söyler . Sonra bu paket adları listesini bir whiledö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.jsondosyaları bulamazlar, örneğin dosyalar (lib isteğe bağlı)
grepSadece ^USEDve UNUSEDdosyalar 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.