एनपीएम निर्भरताएं स्थापित नहीं कर सकता - कुछ को अनलॉक करने का प्रयास करें जो लॉक नहीं किया गया है


192

मैं अपने पैकेज पर एक npm स्थापित चलाने की कोशिश कर रहा हूं। json फ़ाइल, लेकिन मुझे बहुत परेशानी हो रही है। यह कहता है "त्रुटि: XXX को अनलॉक करने का प्रयास करें, जो मेरे सभी आश्रितों पर बंद नहीं किया गया है"। यहाँ उनमें से एक है:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

अगर मैं इसे sudo के रूप में चलाने की कोशिश करता हूं, तो यह आगे लगता है और कुछ पैकेजों को स्थापित करना शुरू कर देता है, लेकिन इसके बजाय कुछ नई त्रुटियां पॉपअप होती हैं:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

मैंने हाल ही में अपने नोड और एनपीएम इंस्टॉलेशन को अपडेट किया है। तो शायद इससे कुछ लेना-देना हो। इसके अलावा, मेरा अधिकांश विकास कार्यालय में हुआ है और आज मैं वीपीएन पर काम कर रहा हूं, इसलिए शायद इसका भी कुछ करना है।

कोई विचार?


यहाँ package.json फ़ाइल है, अगर यह मदद करता है ... (आह), nvm, मैं इसे .. बहुत सारे वर्णों में पेस्ट नहीं कर सकता।
TJ किर्चनर

क्या ओएस आप चल रहे हैं
वेन

जवाबों:


421

फोटोसेंग्मा के अनुसार: https://github.com/npm/npm/issues/4815

इन आदेशों को एक टर्मिनल विंडो में चलाएं (ध्यान दें - $ USER भाग को प्रतिस्थापित न करें ... आपके ब्राउज़र को प्राप्त करने के लिए एक लिनक्स कमांड है:

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

... और ... यदि आप एक मैक पर हैं (जैसे मैं हूं), और अभी भी इन कमांड को चलाने के बाद त्रुटियों को देखता हूं, तो यह अंतिम चलाएं और आपको अच्छा होना चाहिए। (अनुशंसा करें कि आप ऐसा करने से पहले परीक्षण करने का प्रयास करें। मुझे ENTIRE / usr / स्थानीय निर्देशिका में अनुमतियों को बदलना पसंद नहीं है, जब तक कि यह वास्तव में आवश्यक न हो!)

sudo chown -R $USER /usr/local

7
मेरे लिए काम किया धन्यवाद! मेरा नोड_मॉडल फ़ोल्डर एक अलग स्थान पर था, हो सकता है कि यह किसी और की मदद sudo chown -R `whoami` /usr/lib/node_modules/
करेगा

4
अजीब बात है, पुनरावर्ती chownने ~/.npm/_locksमेरे लिए अनुमतियों को नहीं बदला । मुझे मेरा काम चल गयाsudo chown -R myname ~/.npm/_locks
7

7
विदित हो कि यह समाधान बहु उपयोगकर्ता प्लेटफार्मों के लिए अच्छा नहीं है। पहला कमांड ठीक है, दूसरा सिस्टम फ़ाइलों का एक मानक उपयोगकर्ता मालिक बनाता है। / usr / स्थानीय / lib / node_modules केवल npm द्वारा --global विकल्प के साथ उपयोग किया जाता है, जिसका अर्थ है कि sudo का भी उपयोग करना। दुर्भाग्य से, कुछ एनपीएम का उपयोग करते हुए स्क्रिप्ट स्थापित करते हैं दोनों वैश्विक और गैर-वैश्विक एनपीएम कमांड का मिश्रण करते हैं ... इस गंदगी का निर्माण।
फाफमान

5
सहमत, आप सभी की जरूरत है पहला आदेश है। दूसरों से बचें क्योंकि वास्तव में आपके उपयोगकर्ता के स्वामित्व में नहीं होना चाहिए।
pyrospade 4

2
क्या दूसरी पंक्ति के "प्रभाव" को उलटने का कोई तरीका है sudo chown -R $USER /usr/local/lib/node_modules? मैं इसे पढ़ने से पहले भागा कि यह एक अच्छा विचार नहीं है ..
शान्पार्सन

153

मैंने आज दोपहर एक सहकर्मी के साथ काम किया और पता लगाया कि समस्या क्या है। मेरी होम डायरेक्टरी में मेरा ".npm" फोल्डर स्वयं के बजाय रूट उपयोगकर्ता के स्वामित्व में था। मुझे यकीन नहीं है कि इसका कारण क्या हुआ। हो सकता है कि मैंने एक बिंदु पर रूट एडमिन के रूप में नोड या एनपीएम स्थापित किया हो। किसी भी मामले में मैं बस भागा sudo chown -R [username] .npmऔर मैं npm installफिर से अपनी परियोजनाओं से कमांड चलाने में सक्षम था !


11
यह भी मदद करता है यदि आप एक ही कमांड को निष्पादित करते हैं ~/tmp/, या जो भी स्थान नोड एक अस्थायी स्थान के रूप में उपयोग करता है
जेसन

1
आपके उत्तर के लिए धन्यवाद! त्रुटि संदेश खराब होने के कारण मुझे कुछ सिरदर्द से बचाया। लेकिन मैं कहूंगा, कि npm इसे डिफ़ॉल्ट रूप से करना होगा क्योंकि मुझे पूरा यकीन है कि मैंने इसे रूट के तहत स्थापित नहीं किया था। और, पूर्णता के लिए, आपको ch -R <username> .npm
crowmagnumb

खुशी है कि मैं मदद कर सकता है :) और, अच्छी पकड़! मैं अपनी प्रतिक्रिया यह कहने के लिए संशोधित करूंगा।
टीजे किर्चनर

जीवन रक्षक! धन्यवाद
मैथ्यू कुल्लुम

21

मेरे मामले में समस्या npm को एक ऐसे उपयोगकर्ता के साथ लागू कर रही थी जिसके पास गृह निर्देशिका नहीं है, इसलिए उदाहरण के लिए निम्नलिखित कमांड विफल होगी:

sudo -u someUser npm install

समाधान एक गृह निर्देशिका प्रदान करने के लिए है, जहां someUserलेखन पहुंच है:

sudo -u someUser HOME=/some/directory npm install

Upvoted क्योंकि यह वास्तव में मेरे लिए काम किया है, इसलिए यश और धन्यवाद। मैं उत्पादन के लिए तैनात कर रहा हूँ और उपयोगकर्ता के पास एक .npm निर्देशिका भी नहीं है (जो मुझे मिल सकती है, वैसे भी)
स्टुअर्ट वाट

क्रोमोस पर "क्रोनोस" उपयोगकर्ता के साथ काम करता है।
काइल रॉबर्टली

मैं इसके बारे में निर्दिष्ट करके काम करने में सक्षम था sudo -u someUser -i, जो एक नया लॉगिन शेल शुरू करता है। मैंने इसे कुछ और देखा और npm में कैशिंग कोड npm.cache वैरिएबल का उपयोग करता है, जिसे मैं डिफॉल्ट का अनुमान लगा रहा हूं $HOME/.npm/। sudo के पास अलग-अलग व्यवहार भी हो सकते हैं जो गृह चर को विन्यास और कमांड लाइन विकल्पों की उपस्थिति या अनुपस्थिति के आधार पर निर्धारित करता है।
jgibson

11

एक ही मुद्दा था और इसे स्वीकार किए गए उत्तर के अनुसार अनुशीलन को बदलकर तय किया:

sudo chown -R $USER ~/.npm

हालाँकि, दूसरी कमांड को टाला जाना चाहिए क्योंकि यह सिस्टम रिसोर्स की अनुमतियों को डाउनग्रेड करता है ( sudo chown -R $USER /usr/local/lib/node_modules)। अच्छा विचार नहीं।

रिकॉर्ड के लिए: "usr" यूनिक्स सिस्टम रिसोर्सेस/usr/local के लिए खड़ा है ।


1
यह संभवतः एक नए उत्तर के रूप में पोस्ट किए जाने के बजाय स्वीकृत उत्तर पर एक टिप्पणी होनी चाहिए।
केमिक्सनर

उस उत्तर के लेखक को यह पता है, लेकिन उसने अपने उत्तर को अपडेट नहीं किया है, इसलिए मैं कहता हूं कि एक अलग से बहुत वारंट किया गया है।
गुई प्रा

4

इसमें से किसी ने भी मेरे लिए काम नहीं किया। मुझे निम्नलिखित करके मूल रूप से मूल रूप से चलना था:

sudo su -
sudo npm install forever -g

फिर लिनक्स उबंटू 14.04 पर स्थापित पैकेज।


आपको वास्तव में npm को रूट के रूप में नहीं चलाना चाहिए!
एंटोनी 'हैशर' मूसो

2

निम्नलिखित आदेश अनुमति मुद्दों को ठीक करना चाहिए:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

आप यहां आधिकारिक रूप से अनुशंसित अन्य समाधानों के बारे में पढ़ सकते हैं:

https://docs.npmjs.com/getting-started/fixing-npm-permissions


1

मेरा समाधान:

sudo chown -R $USER /usr/local/lib/node_modules/NAMEOFMODULE

मेरे मामले में था:

sudo chown -R $USER /usr/local/lib/node_modules/appium/

लेकिन मुझे वही समस्या हो रही थी, आखिरकार

npm cache clean

इसने काम कर दिया !


0

मुझे भी यही समस्या थी और उन्होंने npm से संबंधित फाइलों और निर्देशिकाओं की अनुमति / स्वामित्व को घंटों के लिए ठीक करने का प्रयास किया लेकिन इसके साथ कोई भाग्य नहीं था।

अचानक मैंने पाया कि मैं था ~/.npmrcके साथ फाइल cacheएक गैर मौजूदा निर्देशिका के लिए प्रवेश की ओर इशारा करते। cacheडिफ़ॉल्ट कैश स्थान का उपयोग करने के लिए उस संपत्ति को हटा दिया गया और अब यह हल हो गया है।


0

अस्वीकरण

मैं एक विंडोज यूजर हूं । हालाँकि, मेरी टीम और मैं npm इंस्टालेशन त्रुटियों के बारे में कई मुद्दों पर आए हैं।

समस्या

निम्नलिखित सबक की एक सूची है जो सीखा है और एक संभावित कट्टरपंथी समाधान है जो हमेशा हमें बचाया है:

  1. node_modules , NPM स्थानीय स्थापना निर्देशिका ऐसी प्रक्रिया रास्तों से अधिक समय की अक्षमता के रूप में ओएस के एक कमी से संशोधन से संरक्षित हो जाता है 255 अक्षर।
  2. यदि फ़ोल्डर को कमांड लाइन टूल के माध्यम से मिटा दिया जाता है, तो यह अभी भी प्रकट हो सकता है जैसे कि फ़ोल्डर एक्सप्लोरर में मौजूद है कि जब इसे एक्सेस करने की कोशिश कर रहा है तो कई अनुमति त्रुटियां देता है।
  3. आपके एंटीवायरस और / या स्थानीय नीति प्रबंधक के आधार पर आप नोड_मॉड्यूल बनाने में सक्षम हो सकते हैं फ़ोल्डर और बाद में इसे एक्सेस या अनुमतियों को फिर से स्थापित कर सकते हैं जिसके परिणामस्वरूप कई स्थापना त्रुटियां हो सकती हैं।
  4. संभव समस्याओं में आगे अंतर्दृष्टि प्राप्त करने के लिए एनपीएम लॉग सक्षम करें:

    npm install --loglevel verbose

उग्र

विश्व स्तर पर रिम्राफ स्थापित करें

 npm install rimraf -g

नोड_मॉड्यूल पर रिमफ़र चलाएं :

rimraf yourDir/node_modules

फिर दौड़ने की कोशिश करें:

npm install

चेतावनी!

या उसके अभाव। कमांड का पालन करने के बारे में बेहद सावधान रहें rimraf। कोई चेतावनी नहीं है, कोई संकेत नहीं है, कुछ भी नहीं है। यह केवल पृथ्वी के चरण से निर्देशिका को मिटा देता है, जैसे कि यह कभी नहीं था। इसे अपने जोखिम पर आज़माएं।

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