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 depchecktidak berfungsi dengan benar! (Misalnya saya mencobanya dengan Typefteks dan memberikan kesalahan parsing yang tidak perlu)
Untuk parsing package.jsonkita 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 findperintah. Baris pertama dan kedua membuatnya mengabaikan node_modulesdanbuild 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 cats package.json. Kemudian, jqdapatkan grup ketergantungan yang diperlukan. (Apakah {} +ada sehingga tidak akan melempar kesalahan jika misalnya tidak ada dependensi rekan dalam file.)
Setelah itu, sedekstrak bagian-bagian di antara tanda kutip, nama paket. -ndan .../pmemberitahu itu untuk mencetak bagian yang cocok dan tidak ada yang lain dari jqoutput JSON. Kemudian kita membaca daftar nama paket ini menjadi satu whilelingkaran.
RESadalah 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.jsonFile (lib opsi)
- Anda harus
grepsecara manual hanya ^USEDdan UNUSEDfile.
- Ini lambat untuk proyek besar - skrip shell sering tidak skala dengan baik. Tapi semoga Anda tidak akan menjalankan ini berkali-kali.