নোড.জেএসে অব্যবহৃত প্যাকেজ আনইনস্টল বা ছাঁটাই করার জন্য এনপিএম কমান্ড


414

কোনও নোড.জেএস প্রকল্প থেকে সমস্ত অব্যবহৃত (অঘোষিত) নির্ভরতাগুলি আনইনস্টল করার কোনও উপায় আছে (যেগুলি আমার মধ্যে আর সংজ্ঞায়িত হয় না package.json)) আমি যখন আমার অ্যাপ্লিকেশনটি আপডেট করি তখন আমি পছন্দ করি নিরপেক্ষ প্যাকেজগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা চাই।


1
কি দ্বারা অব্যবহৃত? ফোল্ডারগুলি node_modulesযখন সংশ্লিষ্টদের থেকে সরিয়ে ফেলা হবে তখন কি সেগুলি থেকে সরানোর অর্থ আপনার package.json?
স্ল্যাक्स

1
ঠিক এমএইচএম এনএমপি এলএল ইতিমধ্যে একটি ভাল ইঙ্গিত দেয় যা প্রার্থীরা।
টেরিয়ন

উত্তর:


670

দ্রষ্টব্য : সাম্প্রতিক npmসংস্করণগুলি স্বয়ংক্রিয়ভাবে এটি করে যখন প্যাকেজ-লকগুলি সক্ষম হয়, তাই --productionপতাকা সহ বিকাশ প্যাকেজগুলি বাদ দেওয়া ছাড়া এটি প্রয়োজনীয় নয় is


npm pruneতালিকাভুক্ত নয় মডিউলগুলি সরিয়ে নিতে চালান package.json

থেকে npm help prune:

এই কমান্ডটি "বহিরাগত" প্যাকেজগুলি সরিয়ে দেয়। যদি কোনও প্যাকেজের নাম সরবরাহ করা হয় তবে কেবল সরবরাহ করা নামেরগুলির সাথে মিলে যাওয়া প্যাকেজগুলি অপসারণ করা হবে।

এক্সট্রােনস প্যাকেজ হ'ল প্যাকেজ যা প্যাকেজ প্যাকেজের নির্ভরতা তালিকায় তালিকাভুক্ত নয়।

তাহলে --productionফ্ল্যাগ নির্দিষ্ট আছে, এই কম্যান্ডের প্যাকেজ আপনার devDependencies উল্লেখিত মুছে ফেলা হবে।


3
আমি যদি এটি সঠিকভাবে পড়ে থাকি তবে এটি সমস্ত উপ-নির্ভরতা সরিয়ে ফেলবে, কারণ তারা তালিকাভুক্ত নয় package.json। এটা কি সঠিক? সুতরাং, পরবর্তী আপডেট বা ইনস্টল করতে সেগুলি পুনরায় ইনস্টল করতে হবে।
ভাগ্নে

1
হ্যাঁ, এটি উপ-নির্ভরতা সরিয়ে ফেলবে। উপ-নির্ভরতাগুলি প্রকৃতপক্ষে মডিউলটির নিজস্ব node_modulesডিরেক্টরিতে সংরক্ষণ করা হয়, সুতরাং সেগুলি মডিউল দিয়ে সরানো হয়।
দারখোগ

2
আমাকে একটি উদাহরণ দিতে দাও। আমি আমার থেকে কর্মফল অপসারণ করি package.json, তবে তীর ছাড়ি। আমি যখন চালনা করি npm prune, তখন আশা করি এর নিজস্ব node_modulesনির্ভরযোগ্যতা সহ নিজস্ব ফোল্ডার সহ সমস্ত কর্মফল সরিয়ে ফেলা হবে। বোরারের নির্ভরতা সম্পর্কে কী (বোর-জেসন, বোর-লগার, chmodr, fstream, গ্লোব, ইত্যাদি)। প্রযুক্তিগতভাবে, সেগুলি আমার প্রকল্পের তালিকাভুক্ত নয় package.json। সেগুলি কি সরিয়ে নেওয়া হয়েছে?
ভাগ্নে

3
না তারা না. লক্ষ্য করুন তারা না আপনার নিজের মধ্যে node_modules, কিন্তু ভিতরে node_modules/bower/node_modules দ্বারা "সুরক্ষিত" node_modules/bower/package.json। আপনার প্যাকেজের নির্ভরতাগুলি এবং আপনার প্যাকেজের নির্ভরতাগুলি মেশানো হয়নি
দারখোগ

2
এবং এনপিএম ইনস্টলের আগে আপনার সঙ্কুচিত মোছা মুছুন, উপরের নির্দেশাবলীতে থাকা উচিত ছিল।
অ্যান্ডি রে

306

আপনি এটা করতে কয়েক মিনিটের সময় চিন্তিত না করে থাকেন, একটি সমাধান হবে rm -rf node_modulesএবং npm installস্থানীয় মডিউল পুনর্নির্মাণের আবার।


93
লোকেরা মন্তব্য ছাড়াই এটিকে কমিয়ে দেওয়া বন্ধ করে দিলে ভাল লাগবে .. গ্রহণযোগ্য উত্তরের বিকল্প হিসাবে নোড প্রকল্প নির্ভরতা পুনরায় সেট করার এটি একটি বৈধ কৌশল। যদি আপনি কোনও নোড_মডিউলগুলি উপ-ডিরেক্টরি সামগ্রীর ক্ষতি করে (সিম-লিঙ্কযুক্ত নির্ভরতাগুলির সাথে সহজ করে তোলা) বা আপনার যদি নোড বা এনপিএম সংস্করণের ছাঁকুনির মতো অতিরিক্ত পরিবর্তন হয় তবে নোড_মডিউলগুলি ফোল্ডারটি সঠিকভাবে পরিষ্কার করা যাবে না তবে এই উত্তরটি দেবে।
পিয়ার্স

41
পুনর্নির্মাণও ফাইলটিকে পুনরুত্পাদনযোগ্য নির্ভরতা গ্রাফ বর্ণনা করে node_modulesযাচাই করে package.json। আপনার অপসারণ এবং পুনরায় ইনস্টল node_modulesকরা মূলত একটি মোতায়েন পরীক্ষা।
jomaller

2
@ জোমালার অগত্যা, বেশিরভাগ মোতায়েনের কর্মপ্রবাহগুলি স্পষ্টভাবে বা স্পষ্টতই একধরনের ক্যাশে থাকে। যদি কোনও প্যাকেজ ইতিমধ্যে ইনস্টল করা থাকে এবং নির্দিষ্টকরণের সাথে ফিট করে তবে এটি রাখা হয়েছে। পুনরায় ইনস্টল করার পরে পুনরায় ইনস্টল করা সেই প্যাকেজ (গুলি) কে মিলবে এমন সর্বশেষতম সংস্করণে ঠেকিয়ে দেবে।
দারখোগ

7
npm pruneএকটি আইওটা সাহায্য করেনি, তবে এটি করেছে। আমার সমস্যাটি ছিল একটি ভাঙ্গা সিমিলিংক।
এরিক বার্কেল্যান্ড

8
অনেক অ-আদর্শ পরিস্থিতিতে বর্তমানে এনপিএম সহ এটি অক্ষম। এছাড়াও প্রশ্নটি অবশ্যই বারবার কাজ বা অতিরিক্ত আনার ক্ষেত্রে কোনও বাধা নির্দিষ্ট করে নি, কেবল কীভাবে শেষ লক্ষ্য অর্জন করবেন। এই উত্তরটি প্রশ্নের উত্তর হিসাবে সন্তুষ্ট করেছে, অন্যরা এই লক্ষ্যের বাইরে কী চায় beyond
পাইরেস

10

এক্সটেনারাস প্যাকেজগুলি অপসারণ করতে আপনি এনএমপি-প্রুন ব্যবহার করতে পারেন ।

npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]

এই কমান্ডটি "বহিরাগত" প্যাকেজগুলি সরিয়ে দেয়। যদি কোনও প্যাকেজের নাম সরবরাহ করা হয় তবে কেবল সরবরাহ করা নামেরগুলির সাথে মিলে যাওয়া প্যাকেজগুলি অপসারণ করা হবে।

এক্সট্রােনস প্যাকেজ হ'ল প্যাকেজ যা প্যাকেজ প্যাকেজের নির্ভরতা তালিকায় তালিকাভুক্ত নয়।

যদি - উত্পাদনের পতাকাটি নির্দিষ্ট করা থাকে বা NODE_ENV এনভায়রনমেন্ট ভেরিয়েবলটি উত্পাদনে সেট করা থাকে তবে এই কমান্ডটি আপনার ডিভিনিডেন্সে নির্দিষ্ট প্যাকেজগুলি সরিয়ে ফেলবে । সেট --no-প্রকাশনা অস্বীকার করবে NODE_ENV সেট হচ্ছে উৎপাদন

যদি - শুকনো-চালিত পতাকা ব্যবহার করা হয় তবে আসলে কোনও পরিবর্তন করা হবে না।

যদি --json পতাকা ব্যবহার করা হয় তবে এনপিএম প্রুনের পরিবর্তনগুলি (বা --Dry-run দিয়ে তৈরি করা হত ) একটি JSON অবজেক্ট হিসাবে মুদ্রিত হবে।

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

আপনি যদি প্যাকেজ-লকগুলি অক্ষম করে থাকেন তবে বহিরাগত মডিউলগুলি সরানো হবে না এবং এগুলি অপসারণের জন্য সময়-সময় থেকে এনপিএম প্রুন চালানো আপনার ব্যাপার ।

সদৃশ হ্রাস করতে এনএমপি-ডেডুপ ব্যবহার করুন

npm dedupe
npm ddp

স্থানীয় প্যাকেজ ট্রি অনুসন্ধান করে এবং গাছের উপরে নির্ভরতা সরিয়ে সামগ্রিক কাঠামো সরল করার চেষ্টা করে, যেখানে একাধিক নির্ভর প্যাকেজগুলি সেগুলি আরও কার্যকরভাবে ভাগ করে নিতে পারে।

উদাহরণস্বরূপ, এই নির্ভরতা গ্রাফটি বিবেচনা করুন:

a
+-- b <-- depends on c@1.0.x
|    `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
     `-- c@1.0.10

এই ক্ষেত্রে, এনপিএম-ডেডাপ গাছটিকে রূপান্তর করবে:

 a
 +-- b
 +-- d
 `-- c@1.0.10

নোডের মডিউল অনুসন্ধানের শ্রেণিবিন্যাসিক প্রকৃতির কারণে, খ এবং ডি উভয়ই গাছের মূল স্তরের একক সি প্যাকেজের মাধ্যমে তাদের নির্ভরতা মেটাবে।

সদৃশ অ্যালগরিদম গাছের সাথে হাঁটছে এবং প্রতিটি নির্ভরতা যতটা সম্ভব গাছের উপরে যতটা সম্ভব ডুপ্লিকেট না পাওয়া গেলেও সরিয়ে নিয়েছে। এটি উভয় সমতল এবং প্রতিলিপিযুক্ত গাছের ফলস্বরূপ।


এনপিএম ডিডিপ চালানোর পরে আমার নোড_মডিউল ফোল্ডারে আমার আরও আইটেম রয়েছে । দীর্ঘশ্বাস!
নেভিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.