fiskeben ने लिखा है:
नकारात्मक पक्ष यह है कि यह पूरी तरह से स्वचालित नहीं है, अर्थात यह पैकेज के नाम से पैकेज नाम नहीं निकालता है और उन्हें जांचता है। आपको प्रत्येक पैकेज के लिए यह करने की आवश्यकता है।
यदि depcheck
ठीक से काम नहीं कर रहा है तो आइए फ़िस्बेन के उत्तर को स्वचालित बनाएं ! (उदाहरण के लिए मैंने इसे टाइपस्क्रिप्ट के साथ आज़माया और इसने अनावश्यक पार्सिंग त्रुटियाँ दीं)
पार्सिंग के लिए 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 फाइलें।
एक फ़ंक्शन भरोसेमंद प्रकार पढ़ेगा।
पहले यह cat
एस package.json
। फिर, jq
आवश्यक निर्भरता समूह प्राप्त करता है। ( {} +
ऐसा इसलिए है कि अगर फ़ाइल में कोई सहकर्मी निर्भरता नहीं हैं, तो यह एक त्रुटि नहीं करेगा।
उसके बाद, sed
उद्धरण, पैकेज नाम के बीच के हिस्सों को निकालता है। -n
और .../p
यह मिलान भागों को मुद्रित करने के लिए कहता है और jq
JSON आउटपुट से और कुछ नहीं । फिर हम पैकेज नामों की इस सूची को एक while
लूप में पढ़ते हैं ।
RES
उद्धरण में पैकेज के नाम की घटनाओं की संख्या है। अभी यह import
/ require
... 'package'
/ है "package"
। यह ज्यादातर मामलों के लिए काम करता है।
फिर हम केवल परिणाम पंक्तियों की संख्या की गणना करते हैं फिर परिणाम प्रिंट करते हैं।
चेतावनियां:
- विभिन्न आयातों में फाइलें नहीं मिलेंगी जैसे
tsconfig.json
फाइलें (lib
विकल्प)
- आपको
grep
केवल ^USED
और UNUSED
फ़ाइलों के लिए मैन्युअल रूप से करना होगा ।
- यह बड़ी परियोजनाओं के लिए धीमी है - शेल स्क्रिप्ट अक्सर अच्छे पैमाने पर नहीं होती हैं। लेकिन उम्मीद है कि आप इसे कई बार नहीं करेंगे।