fiskeben menulis:
Kelemahannya adalah itu tidak sepenuhnya otomatis, artinya tidak mengekstrak nama paket dari package.json dan memeriksanya. Anda perlu melakukan ini untuk setiap paket sendiri.
Mari kita buat jawaban Fiskeben terotomatisasi jika karena alasan apa pun depcheck
tidak berfungsi dengan benar! (Misalnya saya mencobanya dengan Typefteks dan memberikan kesalahan parsing yang tidak perlu)
Untuk parsing package.json
kita dapat menggunakan perangkat lunak jq
. Skrip shell di bawah ini membutuhkan nama direktori tempat untuk memulai.
#!/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"
Pertama itu menciptakan dua file sementara di mana kita bisa men-cache nama paket dan file.
Dimulai dengan find
perintah. Baris pertama dan kedua membuatnya mengabaikan node_modules
danbuild
folder (atau apa pun yang Anda inginkan). Baris ketiga berisi ekstensi yang diizinkan, Anda dapat menambahkan lebih banyak di sini misalnya file JSX atau JSON.
Suatu fungsi akan membaca tipe dependendy.
Pertama cat
s package.json
. Kemudian, jq
dapatkan grup ketergantungan yang diperlukan. (Apakah {} +
ada sehingga tidak akan melempar kesalahan jika misalnya tidak ada dependensi rekan dalam file.)
Setelah itu, sed
ekstrak bagian-bagian di antara tanda kutip, nama paket. -n
dan .../p
memberitahu itu untuk mencetak bagian yang cocok dan tidak ada yang lain dari jq
output JSON. Kemudian kita membaca daftar nama paket ini menjadi satu while
lingkaran.
RES
adalah jumlah kemunculan nama paket dalam tanda kutip. Saat ini import
/ require
... 'package'
/ "package"
. Itu melakukan pekerjaan untuk sebagian besar kasus.
Kemudian kita cukup menghitung jumlah baris hasil kemudian mencetak hasilnya.
Peringatan:
- Tidak akan menemukan file dalam berbagai impor, mis.
tsconfig.json
File (lib
opsi)
- Anda harus
grep
secara manual hanya ^USED
dan UNUSED
file.
- Ini lambat untuk proyek besar - skrip shell sering tidak skala dengan baik. Tapi semoga Anda tidak akan menjalankan ini berkali-kali.