आप पैकेज.जॉन (एनपीएम) में सूचीबद्ध सभी निर्भरता की स्थापना कैसे रद्द करते हैं?


107

अगर मेरी पैकेज रूट में एक पैकेज.जॉसन फाइल परिभाषित है और npm install -gइसे चलाया जाता है तो यह पैकेज.जॉन, ग्लोबली में परिभाषित सभी निर्भरता को स्थापित करेगा।

हालाँकि, यह रिवर्स में काम नहीं करता है।

यदि मैं npm uninstall -gअपने एप्लिकेशन रूट में करता हूं तो यह एक एरर फेंकता है, मुझे इसे पैकेज नाम से पास करने के लिए एक्सपेसेट करना।

यह भी मैं स्थापित एक ही संकुल की स्थापना रद्द नहीं करना चाहिए?

क्या मुझसे कुछ गलत हो रही है?


1
FYI करें npm -g का उपयोग न करने के पीछे मेरा तर्क। peterlyons.com/problog/2012/09/…
पीटर लियोंस

1
याद रखें कि यदि आप अपनी परियोजना के लिए एक मॉड्यूल का उपयोग करना चाहते हैं, तो आपको इसे स्थानीय रूप से स्थापित करना होगा। एक मॉड्यूल को विश्व स्तर पर स्थापित करना आपके टर्मिनल में अधिक कमांड प्रदान करता है, उदाहरण के लिए एक्सप्रेस और एक्सप्रेस (1) के साथ।
warcimede

@sgwilly आप विश्व स्तर पर नोड_मॉड्यूल्स का उपयोग करने के बारे में गलत हैं - यह डॉक्यूमेंटेशन में भी ऐसा कहता है - नोडज्स.ओआरजी / ओपीआई / एमोड्यूल्स.html#modules_all_t पूरी तरह से - आवश्यकता (फ़ंक्शन) 'स्मार्ट' है कि यह विभिन्न स्थान में दिखता है ग्लोबल नोड_मॉड्यूल्स सहित एक मॉड्यूल के लिए एक पथ का प्रयास करने और हल करने के लिए
qodeninja

मुझे अधिक विशिष्ट होना चाहिए था: यह सच है कि आवश्यकता है () आपके विश्व स्तर पर स्थापित मॉड्यूल को खोजने के लिए पर्याप्त स्मार्ट है। यदि आपकी सभी परियोजनाएँ उस मॉड्यूल के एक ही संस्करण पर निर्भर करती हैं तो यह काम करेगा। फिर भी, यदि आपके पास केवल विश्व स्तर पर निर्भरता का प्रबंधन करने के लिए अलग-अलग मॉड्यूल संस्करणों पर निर्भर परियोजनाओं को बनाए रखने में एक कठिन समय हो सकता है। यही कारण है कि हमेशा स्थानीय स्तर पर मॉड्यूल स्थापित करने के लिए सबसे अच्छा अभ्यास है, और केवल उन्हें वैश्विक रूप से स्थापित करें जब आप कुछ आसान निष्पादन योग्य कमांड तक पहुंच प्राप्त करना चाहते हैं।
warchimede

@sgwilly - अपने विचारों को यहाँ साझा करने के लिए धन्यवाद - विशेष रूप से यह परियोजना एक वितरण योग्य है, इसलिए इसे कुछ भी अपडेट करने की कोशिश नहीं करनी चाहिए - वास्तव में अपडेट आरपीएम (नोट आरपीएम नहीं एनपीएम) और वास्तविक नोड_मॉडल पर सिकुड़ा हुआ होगा - मुझे बस उसी तरह से सिस्टम को साफ करने की ज़रूरत थी जो आरपीएम स्थापित करने (अपने देव वातावरण में) को समाप्त करने के लिए
qodeninja

जवाबों:


168

यदि बैश का उपयोग कर रहे हैं, तो बस उस फ़ोल्डर में स्विच करें जिसमें आपकी पैकेज.जसन फ़ाइल है और निम्नलिखित को चलाएँ:

for package in `ls node_modules`; do npm uninstall $package; done;

वैश्विक रूप से स्थापित पैकेजों के मामले में, अपने %appdata%/npmफ़ोल्डर में स्विच करें (यदि विंडोज पर) और उसी कमांड को चलाएं।

EDIT: यह कमांड npm 3.3.6 (Node 5.0) के साथ टूटती है। अब मैं निम्नलिखित बैश कमांड का उपयोग कर रहा हूं, जिसे मैंने अपने .bashrc फ़ाइल में npm_uninstall_all में मैप किया है।

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

जोड़ा गया बोनस? यह तेजी से रास्ता है!

https://github.com/npm/npm/issues/10187


1
आपने "कमांड को विश्व स्तर पर सभी npm मॉड्यूल को हटाने के लिए" के उत्तर के रूप में सटीक एक ही कमांड पोस्ट किया। यह उस स्थिति और इस एक दोनों में करने के लिए उपयुक्त चीज कैसे हो सकती है?
कोई भी

@AndrewMedico यह कैसे उचित नहीं है? आपके package.json फ़ाइल में स्थापित संकुल आपके नोड_मॉडल फ़ोल्डर में स्थापित किया जाएगा। यह कमांड प्रत्येक उप-फ़ोल्डर को नोड_मॉडल फ़ोल्डर में ले जाएगा और npm uninstall <package>प्रत्येक फ़ोल्डर के लिए चलेगा । मैंने खुद ऐसा किया है और यह शानदार काम करता है!
jedmao

2
@UgoRobain अच्छा सवाल है। जैसा कि यह पता चला है, कुछ निर्भरताएं वास्तव में गहरी होती हैं। NTFS फाइल सिस्टम (विंडोज) पर, कम से कम, यह निर्देशिकाओं को हटाने में समस्याएँ हैं जहाँ पथ का नाम किसी प्रकार की सीमा से अधिक लंबा है, इन प्रेत निर्देशिकाओं को छोड़ कर जिन्हें आप हटा नहीं सकते हैं। सौभाग्य से, इसका npm uninstallख्याल रखता है, यही वजह है कि यह चाल उपयोगी है।
jedmao

7
यहाँ मैं इसे foreach($package in ls node_modules){npm uninstall $package}
शक्तियाँ के

1
खिड़कियों पर काम करने के लिए प्रतीत नहीं होता है। tr is not recognized
Overdrivr

78

यह मेरे लिए काम किया:

प्रॉम्प्ट या gitbash को अपने प्रोजेक्ट में नोड_मॉडल फ़ोल्डर में तब निष्पादित करें:

npm uninstall *

उस प्रोजेक्ट के लिए सभी स्थानीय पैकेज हटा दिए गए हैं।


क्या यह वैश्विक इंस्टॉल को भी नहीं हटाता है?
शिंज़ो

@ शिनज़ौ ने मेरे लिए वैश्विक संस्थापनों को नहीं हटाया।
टेलर एड्मिस्टन

1
मैक 10.13.5 पर, यह बहुत सी त्रुटि नीचे फेंकता है "> heapdump@0.3.9 स्थापित / उपयोगकर्ता / विक्रमण्य / नोड_मॉड्यूल्स / हीपडम्प> नोड-जिप पुनर्निर्माण CXX (लक्ष्य) रिलीज / obj.target / addon / src / heapdump। o फ़ाइल में ../src/heapdump.cc:17: ../src/compat-inl.h:300:19: त्रुटि: 'v8 :: IsolpuProfiler' नाम का कोई भी सदस्य शामिल नहीं है, जिसमें इस 'वापसी' अलग हो- GetCpuProfiler () -> StartProfiling (शीर्षक, record_samples); "
विक्रमवी

35

विंडोज़ के लिए node_modules dir पर जाएं और इसे पॉवरशेल में चलाएं

npm uninstall (Get-ChildItem).Name 

मेरे लिए, यह त्रुटि "कमांड लाइन बहुत लंबी है।"
डैनियल

29

मैंने हाल ही में एक नोड कमांड पाया जो सभी विकास निर्भरताओं की स्थापना रद्द करने की अनुमति देता है:

npm prune --production

जैसा कि मैंने उल्लेख किया है, यह कमांड केवल विकास निर्भरता पैकेज को अनइंस्टॉल करता है। कम से कम इसने मुझे इसे मैन्युअल रूप से नहीं करने में मदद की।


8

Windows उपयोगकर्ताओं के लिए युक्ति: node_modulesमूल निर्देशिका में इस PowerShell कमांड को चलाएँ :

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

यह अनिवार्य रूप से एक नकली, खाली package.json बनाता है, npm pruneनोड_मॉडल में सब कुछ हटाने के लिए कॉल करता है, मूल पैकेज को पुनर्स्थापित करता है। json और सब कुछ फिर से इंस्टॉल करता है।

अन्य समाधानों में से कुछ अधिक सुरुचिपूर्ण हो सकते हैं, लेकिन मुझे संदेह है कि यह तेज और संपूर्ण है। अन्य थ्रेड्स पर मैंने देखा है कि लोग सिर्फ नोड_मॉड्यूल्स डायरेक्टरी को हटाने का सुझाव देते हैं, लेकिन कम से कम विंडोज़ के लिए, यह एनपीएम को बाद में चोक करने का कारण बनता है क्योंकि बिन डायरेक्टरी गायब हो जाती है। शायद लिनक्स पर यह ठीक से बहाल हो जाता है, लेकिन खिड़कियां नहीं।


1
मेरे मामले में - मैं मौजूदा package.json (क्योंकि सीआई पर स्क्रिप्ट चलाने के बाद NPM स्क्रिप्ट मार डाला गया की ..) की ज़रूरत नहीं थी तो मैं बस के साथ चला गया: "गूंज {}> package.json और NPM छँटाई"
रिक्की

5

वास्तव में ऐसा करने का कोई विकल्प नहीं है, यदि आप package.jsonकेवल npm lsउसी निर्देशिका पर पैकेज को अनइंस्टॉल करना चाहते हैं जो package.jsonनिर्भर करता है और जिस पैकेज को आप हटाना चाहते हैं, npm uninstall <name>उसके npm rm <name>लिए उपयोग या उपयोग करते हैं।


8
मुझे पता है कि उन्हें व्यक्तिगत रूप से कैसे हटाया जाए - यह सिर्फ और अधिक समझ में आता है अगर पैकेज के खिलाफ चलने के लिए एक कमांड थी। उसी तरह से एनपीएम स्थापित काम करता है।
कोओदिनेंजा

नहीं, हम हर मॉड्यूल को हाथ से अनइंस्टॉल नहीं करना चाहते हैं।
शिंज़ौ

1
  1. package.json से अवांछित निर्भरता को हटा दें
  2. npm i

" npm i" केवल लापता डिपो स्थापित नहीं करेगा, यह पैकेज से मेल खाने के लिए नोड_मॉडल को अपडेट करता है


1

( जब तक आप सब कुछ नहीं पढ़ते तब तक इन चरणों को दोहराएं नहीं )

मेरे लिए सभी उल्लिखित समाधान काम नहीं किए। सू मैं /usr/libवहाँ चला गया

for package in `ls node_modules`; do sudo npm uninstall $package; done;

लेकिन इसने npmपैकेज को भी हटा दिया और केवल आधा पैकेज (जब तक यह पत्र n तक पहुंच गया)।

इसलिए मैंने नोड गाइड द्वारा फिर से नोड स्थापित करने का प्रयास किया।

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

लेकिन यह npmफिर से स्थापित नहीं हुआ।

इसलिए मैंने पूरे नोड को sudo apt-get remove nodejs फिर से इंस्टॉल करने का फैसला किया और फिर से गाइड द्वारा स्थापित किया।

अब एनपीएम फिर से काम कर रहा है लेकिन वैश्विक मॉड्यूल अभी भी हैं। इसलिए मैंने निर्देशिका की सामग्री की जाँच की /usr/lib/node_modulesऔर लगता है कि यहाँ केवल महत्वपूर्ण है npm। तो मैंने ऊपर की कमांड को एडिट कर दिया सिवाय सब कुछ अनइंस्टॉल करने के लिएnpm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

इसने उन सभी मॉड्यूल्स को हटा दिया जो उपसर्ग नहीं थे @। सू I मैंने उपनिर्देशिकाओं के लिए लूप बढ़ाया।

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

मेरे /usr/lib/node_modulesअब केवल npmऔर लिंक किए गए पैकेज हैं।


0

यहां तक ​​कि आपको उसके लिए लूप चलाने की आवश्यकता नहीं है।

आप केवल एकल आदेश का उपयोग करके सभी नोड_मॉड्यूल्स को हटा सकते हैं: -

npm uninstall `ls -1 node_modules | tr '/\n' ' '`


0

VIKAS KOHLI और jedmao का पिगी-बैकिंग , आप ऐसा कर सकते हैं

एकल पंक्ति संस्करण:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

बहु-पंक्तिबद्ध संस्करण:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

0

एक और SIMPLE विकल्प नोड_मॉडल और पैकेज-लॉक.जॉन को हटाना है

rm -rf node_modules
rm -rf package-lock.json

इसके बाद आप npm संकुल को पुनः स्थापित करने का प्रयास कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.