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यह मिलान भागों को मुद्रित करने के लिए कहता है और jqJSON आउटपुट से और कुछ नहीं । फिर हम पैकेज नामों की इस सूची को एक whileलूप में पढ़ते हैं ।
RESउद्धरण में पैकेज के नाम की घटनाओं की संख्या है। अभी यह import/ require... 'package'/ है "package"। यह ज्यादातर मामलों के लिए काम करता है।
फिर हम केवल परिणाम पंक्तियों की संख्या की गणना करते हैं फिर परिणाम प्रिंट करते हैं।
चेतावनियां:
- विभिन्न आयातों में फाइलें नहीं मिलेंगी जैसे
tsconfig.jsonफाइलें (lib विकल्प)
- आपको
grepकेवल ^USEDऔर UNUSEDफ़ाइलों के लिए मैन्युअल रूप से करना होगा ।
- यह बड़ी परियोजनाओं के लिए धीमी है - शेल स्क्रिप्ट अक्सर अच्छे पैमाने पर नहीं होती हैं। लेकिन उम्मीद है कि आप इसे कई बार नहीं करेंगे।