Package.json- এ অব্যবহৃত এনএমপি প্যাকেজগুলি সন্ধান করুন


231

আপনার প্যাকেজ.জসন ফাইলে প্যাকেজ রয়েছে কিনা তা নির্ধারণ করার কোনও উপায় আছে যা আর প্রয়োজন নেই?

উদাহরণস্বরূপ, কোনও প্যাকেজ চেষ্টা করার পরে এবং পরে মন্তব্য করা বা কোড মোছার সময়, তবে এটি আনইনস্টল করতে ভুলে গিয়ে আমি মুছে ফেলা হতে পারে এমন কয়েকটি প্যাকেজ নিয়ে শেষ করি।

কোনও প্যাকেজ নিরাপদে মোছা যায় কিনা তা নির্ধারণের কার্যকর উপায় কী হবে?

উত্তর:


258

আপনি একটি এনপিএম মডিউল ডিপচেক ব্যবহার করতে পারেন (নোডের কমপক্ষে সংস্করণ 10 প্রয়োজন)।

  1. মডিউলটি ইনস্টল করুন:

    npm install depcheck -g
    
    or
    
    yarn global add depcheck
  2. এটি চালান এবং অব্যবহৃত নির্ভরতাগুলি সন্ধান করুন:

    depcheck

এই পদ্ধতির ভাল জিনিস হ'ল আপনাকে আদেশ findবা grepআদেশটি মনে রাখতে হবে না ।

এনপিএক্স ইনস্টল না করে চালানোর জন্য :

npx depcheck

11
depcheck-es6 এখন ডিপেকের সাথে একীভূত হয়েছে
সাইবারওয়ম্ব্যাট

47
দরকারী দেখাচ্ছে না। আমি স্ট্যান্ডার্ড কৌণিক 2 ক্লাইপ সেটআপ ব্যবহার করছি এবং depcheckপ্রতিটি প্যাকেজটিকে unusedকেবল ভুল হিসাবে তালিকাভুক্ত করছি
phil294

5
বিশেষ দ্রষ্টব্য। প্যাকেজ.জসন-এ উল্লিখিত স্ক্রিপ্টগুলিতে ব্যবহৃত প্যাকেজগুলি ডিপচেক গ্রাহ্য করে না
জাভিয়ের আরিয়াস

17
এটি একবার চালানোর জন্য (w / o ইনস্টলেশন) - এনপিএক্স ব্যবহার করুন :npx depcheck
কিরিল

6
আমার পক্ষে কাজ করেনি। এটি সমস্ত প্যাকেজকে অব্যবহৃত হিসাবে তালিকাভুক্ত করেছে।
dev27

131

একটি প্যাকেজ নামেও রয়েছে npm-check:

npm-যাচাই

পুরানো, ভুল এবং অব্যবহৃত নির্ভরতাগুলি পরীক্ষা করুন।

এখানে চিত্র বর্ণনা লিখুন

এটি বেশ শক্তিশালী এবং সক্রিয়ভাবে বিকশিত। এর একটির মধ্যে এটি অব্যবহৃত নির্ভরতা যাচাই করার বৈশিষ্ট্যযুক্ত - এই অংশটির জন্য এটি depcheckঅন্য উত্তরে উল্লিখিত মডিউলটি ব্যবহার করে ।


8
আমাকে ডিপেকের মতো একই ফলাফল দেবে বলে মনে হচ্ছে। দেখে মনে হচ্ছে এটি অব্যবহৃত নির্ভরতাগুলি অনুসন্ধান করতে এমনকি ছাড়চেক ব্যবহার করে।
অ্যালেক্স কে

3
npm outdatedচেক এবং তালিকা বর্তমান, চেয়েছিলেন এবং সর্বশেষ প্যাকেজ সংস্করণ। যদিও অব্যবহৃত প্যাকেজের কোনও তালিকা নেই।
মিগার্ডে

1
পাশাপাশি দরকারী দেখাচ্ছে না। আমি স্ট্যান্ডার্ড কৌণিক সেটআপটি ব্যবহার করছি এবং এটি প্রতিটি প্যাকেজটিকে অব্যবহৃত হিসাবে তালিকাভুক্ত করে যা ঠিক ততই ভুল
কাইল বারকেট

5

যদি আপনি ওএস (লিনাক্স, ওএসএক্স ইত্যাদি) এর মতো ইউনিক্স ব্যবহার করে থাকেন তবে আপনি আপনার প্যাকেজের নাম সম্বলিত বিবৃতি প্রয়োজনের সংমিশ্রণটি অনুসন্ধান করতে findএবং egrepঅনুসন্ধান করতে পারেন :

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'name-of-package' {} \;

আপনি যদি পুরো require('name-of-package')বিবৃতিটি অনুসন্ধান করেন তবে সঠিক ধরণের উদ্ধৃতি চিহ্নগুলি ব্যবহার করতে ভুলবেন না:

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'require("name-of-package")' {} \;

অথবা

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni "require('name-of-package')" {} \;

খারাপ দিকটি এটি সম্পূর্ণ স্বয়ংক্রিয় নয়, অর্থাৎ এটি প্যাকেজের নামগুলি বের করে package.jsonএগুলি পরীক্ষা করে না। প্রতিটি প্যাকেজের জন্য নিজেকে এটি করা দরকার। যেহেতু package.jsonকেবল জেএসএন তাই এটি একটি ছোট স্ক্রিপ্ট লিখে এর প্রতিকার করা যেতে পারে যা child_process.execপ্রতিটি নির্ভরতার জন্য এই আদেশটি চালাতে ব্যবহার করে। এবং এটি একটি মডিউল করুন। এবং এটি এনপিএম রেপোতে যুক্ত করুন ...


.jsxফাইল এবং .tsফাইল ইত্যাদি সম্পর্কে কী : ডি
ওজজিআইই

1
স্পষ্টতই এই পদ্ধতির ব্যবহার আমরা আমাদের প্রতিক্রিয়া অ্যাপ্লিকেশনটিতে প্রতিক্রিয়া মডিউলটি ব্যবহার করছি না: ডি
ওজজিআই

4

ফিসকেবেন লিখেছেন:

খারাপ দিকটি এটি সম্পূর্ণ স্বয়ংক্রিয় নয়, অর্থাৎ এটি প্যাকেজ.জসন থেকে প্যাকেজের নামগুলি বের করে না এবং এগুলি পরীক্ষা করে। প্রতিটি প্যাকেজের জন্য আপনাকে এটি করা দরকার।

যেকোনো কারণে 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 ফোল্ডার (অথবা যাহা চান)। তৃতীয় লাইনে অনুমোদিত এক্সটেনশন রয়েছে, আপনি এখানে আরও যুক্ত করতে পারেন যেমন জেএসএক্স বা জেএসএন ফাইল।

একটি ফাংশন নির্ভরশীল প্রকারগুলি পড়বে।

প্রথম এটা catগুলি package.json। তারপরে, jqপ্রয়োজনীয় নির্ভরতা গ্রুপ পায় gets ( {} +সেখানে কি আছে যাতে এটি কোনও ত্রুটি ছুঁড়ে না দেয়, উদাহরণস্বরূপ যদি ফাইলটিতে পিয়ার নির্ভরতা না থাকে))

এর পরে, sedপ্যাকেজের নাম , উদ্ধৃতিগুলির মধ্যে অংশগুলি বের করে। -nএবং .../pএটি মিলে যাওয়া অংশগুলি এবং jqJSON আউটপুট থেকে অন্য কিছু মুদ্রণ করতে বলে । তারপরে আমরা প্যাকেজের নামের এই তালিকাটি একটি whileলুপে পড়ি ।

RESউদ্ধৃতিতে প্যাকেজ নামের সংঘটন সংখ্যা। এখনই এটি import/ require... 'package'/ "package"। এটি বেশিরভাগ ক্ষেত্রে কাজ করে।

তারপরে আমরা কেবল ফলাফলের রেখার সংখ্যা গণনা করি তারপরে ফলাফলটি মুদ্রণ করি।

আদেশ সহকারে:

  • বিভিন্ন আমদানিতে ফাইলগুলি খুঁজে পাবেন না যেমন tsconfig.jsonফাইল (lib বিকল্প)
  • আপনাকে grepকেবলমাত্র ফাইল ^USEDএবং UNUSEDফাইলের জন্য ম্যানুয়ালি করতে হবে।
  • এটি বড় প্রকল্পগুলির জন্য ধীর - শেল স্ক্রিপ্টগুলি প্রায়শই ভাল স্কেল করে না। তবে আশা করি আপনি এটি অনেক বার চালাবেন না।

1
সম্পাদকরা মাঝে মধ্যে একাধিক লাইনে মোড়কে আমদানির কারণ ঘটায়। এই স্ক্রিপ্টটি কি "প্যাকাগ্যাগ্যাব্ল্যা" থেকে 'আমদানি' বা 'প্রয়োজনীয়' আলাদা লাইনে থাকবে এমন বিবৃতি ধরবে? অন্য কথায়, এটি কি আমদানিতে হোয়াইটস্পেস উপেক্ষা করে বা বিবৃতি প্রয়োজন?
vdiaz1130

1

আমরা এই উদ্দেশ্যে নীচের এনপিএম মডিউলটি ব্যবহার করতে পারি:

https://www.npmjs.com/package/npm-check-unused


এটি প্রকাশিত নয় এমন কিছু ব্যবহৃত হয়েছে, যা এখনও অনুমানযোগ্য আমার অনুমান :-) এটি ওয়েবপ্যাক লোডারগুলি বুঝতে পারে না ;-)
ওজজিআই

1

এখানে অনেক উত্তর হ'ল কীভাবে অব্যবহৃত আইটেমগুলি সন্ধান করতে হয়।

আমি সেগুলি স্বয়ংক্রিয়ভাবে অপসারণ করতে চেয়েছিলাম ।

  1. এই নোড প্রকল্পটি ইনস্টল করুন।

    $ npm install -g typescript tslint tslint-etc


  1. মূল ডিয়ারে, একটি নতুন ফাইল যুক্ত করুন tslint-imports.json

    { "extends": [ "tslint-etc" ], "rules": { "no-unused-declaration": true } }


  1. এটি আপনার নিজের ঝুঁকিতে চালান, একটি ব্যাকআপ করুন :)

    $ tslint --config tslint-imports.json --fix --project .


তবে এটি কেবল জেএস ফাইলগুলি থেকে সরাতে চলেছে। তবে তবুও ভাল।
অয়ন নাহিয়ান

কিভাবে সম্পর্কেnpx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm
অ্যালেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.