fiskeben wrote:
ข้อเสียคือมันไม่ได้ทำงานโดยอัตโนมัตินั่นคือไม่ได้แยกชื่อแพ็คเกจจาก package.json และตรวจสอบ คุณต้องทำสิ่งนี้กับแต่ละแพ็คเกจด้วยตนเอง
ให้คำตอบของ Fiskeben เป็นแบบอัตโนมัติถ้าด้วยเหตุผลใดก็ตามที่depcheckทำงานไม่ถูกต้อง! (เช่นฉันลองใช้ Typescript และให้ข้อผิดพลาดในการแยกวิเคราะห์ที่ไม่จำเป็น)
สำหรับการวิเคราะห์คำpackage.jsonเราสามารถใช้ซอฟต์แวร์jqได้ เชลล์สคริปต์ด้านล่างต้องการชื่อไดเรกทอรีที่จะเริ่ม
#!/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"
ก่อนอื่นมันจะสร้างไฟล์ชั่วคราวสองไฟล์ที่เราสามารถแคชชื่อและไฟล์แพ็คเกจ
มันเริ่มต้นด้วยfindคำสั่ง บรรทัดแรกและบรรทัดที่สองทำให้ละเว้นnode_modulesและbuildโฟลเดอร์ (หรือสิ่งที่คุณต้องการ) บรรทัดที่สามมีส่วนขยายที่อนุญาตคุณสามารถเพิ่มเพิ่มเติมได้ที่นี่เช่นไฟล์ JSX หรือ JSON
ฟังก์ชั่นจะอ่านประเภทพึ่งพา
ครั้งแรกมันcats package.jsonจากนั้นjqรับกลุ่มพึ่งพาที่จำเป็น ( {} +มีเพื่อที่จะไม่เกิดข้อผิดพลาดหากเช่นไม่มีการพึ่งพาเพื่อนในไฟล์)
หลังจากนั้นsedแยกส่วนระหว่างเครื่องหมายคำพูดชื่อแพคเกจ -nและ.../pบอกให้พิมพ์ส่วนที่ตรงกันและไม่มีอะไรอื่นจากjqเอาท์พุท JSON ของ จากนั้นเราอ่านรายชื่อแพคเกจนี้ลงในwhileลูป
RESคือจำนวนครั้งของชื่อแพ็กเกจในเครื่องหมายคำพูด ตอนนี้ก็import/ require... /'package' "package"มันทำงานได้สำหรับกรณีส่วนใหญ่
จากนั้นเราก็นับจำนวนบรรทัดผลลัพธ์จากนั้นพิมพ์ผลลัพธ์
คำเตือน:
- จะไม่ค้นหาไฟล์ในการนำเข้าที่แตกต่างกันเช่น
tsconfig.jsonไฟล์ ( libตัวเลือก)
- คุณต้อง
grepด้วยตนเองสำหรับไฟล์^USEDและเท่านั้นUNUSED
- มันช้าสำหรับโครงการขนาดใหญ่ - เชลล์สคริปต์มักจะขยายขนาดไม่ได้ แต่หวังว่าคุณจะไม่ทำงานหลายครั้ง