node.js - एनपीएम सुडो के बिना त्रुटि फेंकता है




unix permissions (20)

"सिस्टम-ग्लोबल" फ़ोल्डर पर मालिक को बदलना एक हैक है। एक ताजा इंस्टॉल पर, मैं "यूजर-ग्लोबल" कार्यक्रमों के लिए पहले से ही लिखने योग्य स्थान का उपयोग करने के लिए एनपीएम को कॉन्फ़िगर करता हूं:

npm config set prefix ~/npm

फिर सुनिश्चित करें कि आप उस फ़ोल्डर को अपने पथ में जोड़ दें:

export PATH="$PATH:$HOME/npm/bin"

देखें @ErikAndreas का answer एनपीएम मॉड्यूल का answer बिना @ErikAndreas के वैश्विक स्तर पर स्थापित नहीं होगा और @sindresorhus github.com/sindresorhus/guides/blob/master/… साथ $MANPATH भी सेट करेगा।

मैंने nodejs.org पर पैकेज के माध्यम से नोड और एनपीएम स्थापित किया है और जब भी मैं एनपीएम के साथ कुछ खोज या स्थापित करने का प्रयास करता हूं तो यह निम्न त्रुटि फेंकता है, जब तक कि मैं कमांड को कम नहीं करता। मुझे लगता है कि यह एक अनुमति मुद्दा है? मैं पहले से ही व्यवस्थापक हूँ।

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

@Yves एम का जवाब मेरे समाधान के समान था। यहां दिए गए आदेश दिए गए हैं, जो उनके से थोड़ा अलग थे।

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

फिर नवीनतम संस्करण के लिए पूछताछ करें:

nvm ls-remote

फिर नवीनतम संस्करण स्थापित करें:

nvm install YOUR_VERSION_HERE

उदाहरण

nvm install v5.8.0

आपके एनपीएम निर्देशिका ( npm link , npm install -g , आदि) में लिखने जैसी चीजें करते समय नोड स्थापित करते समय आपके द्वारा उपयोग की जाने वाली अनुमतियों की आवश्यकता होगी।

आप शायद रूट अनुमतियों के साथ नोड स्थापना चलाते हैं, यही कारण है कि वैश्विक पैकेज स्थापना आपको रूट होने के लिए कह रही है।

समाधान 1: एनवीएम

अनुमतियों के साथ हैक मत करो, सही तरीके से नोड स्थापित करें।

विकास मशीन पर, आपको रूट अनुमतियों के साथ नोड स्थापित और चलाने नहीं चाहिए, अन्यथा npm link जैसी चीजें, npm install -g को समान अनुमतियों की आवश्यकता होगी।

NVM (नोड संस्करण प्रबंधक) आपको रूट अनुमतियों के बिना नोड स्थापित करने की अनुमति देता है और आपको आसानी से खेलने के लिए नोड के कई संस्करण स्थापित करने की अनुमति देता है .. विकास के लिए बिल्कुल सही।

  1. अनइंस्टॉल नोड (रूट अनुमति शायद आवश्यक हो)। This आपकी मदद कर सकता है।
  2. फिर NVM निर्देशों के बाद NVM स्थापित NVM
  3. nvm install node माध्यम से नोड स्थापित करें: nvm install node

अब npm link , npm install -g अब आपको रूट होने की आवश्यकता नहीं होगी।

संपादित करें: https://docs.npmjs.com/getting-started/fixing-npm-permissions भी https://docs.npmjs.com/getting-started/fixing-npm-permissions

समाधान 2: किसी दिए गए उपयोगकर्ता के लिए वैश्विक स्तर पर पैकेज इंस्टॉल करें

अनुमतियों के साथ हैक न करें, वैश्विक स्तर पर सही तरीके से एनपीएम पैकेज स्थापित करें।

यदि आप ओएसएक्स या लिनक्स पर हैं, तो आप वैश्विक स्तर पर स्थापित पैकेजों को कैसे ढूंढें, यह जानने के लिए अपने वैश्विक पैकेज के लिए उपयोगकर्ता समर्पित निर्देशिका बना सकते हैं और npm और node सेटअप कर सकते हैं

सूडो के बिना विश्व स्तर पर एनपीएम मॉड्यूल स्थापित करने के चरण-दर-चरण निर्देशों के लिए github.com/sindresorhus/guides/blob/master/… को github.com/sindresorhus/guides/blob/master/…

यह भी देखें: https://docs.npmjs.com/getting-started/fixing-npm-permissions को https://docs.npmjs.com/getting-started/fixing-npm-permissions करने पर एनपीएम का दस्तावेज।


इस तरह मैंने विंडोज 8.1 पर इस मुद्दे को हल किया:

  • अपने नोडजेज़ पर जाएं (आमतौर पर सी: \ प्रोग्राम फ़ाइलें \ nodejs)
  • राइड क्लिक करें node_modules फ़ोल्डर और गुणों पर जाएं
  • सुरक्षा टैब पर क्लिक करें और उन्नत
  • शीर्ष पर आप "स्वामी: सिस्टम" देखेंगे, परिवर्तन पर क्लिक करें
  • उस उपयोगकर्ता को दर्ज करें जिसके लिए आप अनुमति चाहते हैं और ठीक क्लिक करें
  • उन्नत सेटिंग्स के नीचे दिए गए बॉक्स को चेक करें "इस ऑब्जेक्ट से विरासत अनुमति प्रविष्टियों के साथ सभी बाल ऑब्जेक्ट अनुमति प्रविष्टियों को बदलें" और ठीक क्लिक करें
  • जो भी एनपीएम इंस्टॉल / अपडेट आपको चाहिए, करो

एक EACCES त्रुटि के साथ npm install अनुमतियों को ठीक करने के तरीके पर आधिकारिक दस्तावेज https://docs.npmjs.com/getting-started/fixing-npm-permissions पर स्थित है।

ओएसएक्स पर .pkg इंस्टॉलर का उपयोग करके नोड के ताजा इंस्टॉल के बाद मुझे इस समस्या का सामना करना पड़ा। यहां कुछ शानदार उत्तर दिए गए हैं, लेकिन मुझे अभी तक npmjs.com पर एक लिंक नहीं मिला।

विकल्प 1: एनपीएम की डिफ़ॉल्ट निर्देशिका में अनुमति बदलें

  1. एनपीएम की निर्देशिका के लिए पथ खोजें:

    npm config get prefix
    

कई प्रणालियों के लिए, यह / usr / स्थानीय होगा

चेतावनी : यदि प्रदर्शित पथ सिर्फ / usr है , तो विकल्प 2 पर स्विच करें।

  1. वर्तमान उपयोगकर्ता के नाम पर एनपीएम की निर्देशिका के मालिक को बदलें (आपका उपयोगकर्ता नाम!):

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

    यह एनपीएम और कुछ अन्य टूल्स ( lib / node_modules , bin , और शेयर ) द्वारा उपयोग किए गए उप-फ़ोल्डर की अनुमतियों को बदलता है।

विकल्प 2: एनपीएम की डिफ़ॉल्ट निर्देशिका को दूसरी निर्देशिका में बदलें

ऐसे समय होते हैं जब आप डिफ़ॉल्ट निर्देशिका के स्वामित्व को बदलना नहीं चाहते हैं जो npm उपयोग करता है (यानी / usr ) क्योंकि इससे कुछ समस्याएं हो सकती हैं, उदाहरण के लिए यदि आप अन्य उपयोगकर्ताओं के साथ सिस्टम साझा कर रहे हैं।

इसके बजाय, आप एक अलग निर्देशिका का उपयोग करने के लिए एनपीएम को कॉन्फ़िगर कर सकते हैं। हमारे मामले में, यह हमारे घर फ़ोल्डर में एक छिपी निर्देशिका होगी।

  1. वैश्विक प्रतिष्ठानों के लिए निर्देशिका बनाएं:

    mkdir ~/.npm-global
    
  2. नई निर्देशिका पथ का उपयोग करने के लिए एनपीएम कॉन्फ़िगर करें:

    npm config set prefix '~/.npm-global'
    
  3. एक ~ / .profile फ़ाइल खोलें या बनाएं और यह पंक्ति जोड़ें:

    export PATH=~/.npm-global/bin:$PATH
    
  4. कमांड लाइन पर वापस, अपने सिस्टम चर अद्यतन करें:

    source ~/.profile
    

एनपीएम को ठीक से कॉन्फ़िगर करने के लिए यहां एक और शानदार फिक्स, निम्न आदेश चलाएं:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

जैसे कि हमें यहां और अधिक जवाब चाहिए, लेकिन वैसे भी ..

सिंड्रे सोरस के पास एक गाइड है github.com/sindresorhus/guides/blob/master/… सूडो के github.com/sindresorhus/guides/blob/master/… अनुमतियों के साथ गड़बड़ किए बिना साफ तरीके से कैसे स्थापित करें:

किसी दिए गए उपयोगकर्ता के लिए विश्व स्तर पर पैकेज इंस्टॉल करने का एक तरीका यहां दिया गया है।

  1. अपने वैश्विक पैकेज के लिए एक निर्देशिका बनाएँ

    mkdir "${HOME}/.npm-packages"
    
  2. भविष्य में उपयोग के लिए इस निर्देशिका को अपने .bashrc / .zshrc में संदर्भित करें:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. अपने वैश्विक स्तर पर स्थापित पैकेज को स्टोर करने के लिए एनपीएम को इंगित करें। आपके $HOME/.npmrc फ़ाइल में जोड़ें:

    prefix=${HOME}/.npm-packages
    
  4. सुनिश्चित करें कि नोड उन्हें मिलेगा। अपने .bashrc / .zshrc में निम्नलिखित जोड़ें:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. सुनिश्चित करें कि आपको स्थापित बाइनरी और मैन पेज मिलेगा। अपने .bashrc / .zshrc में निम्नलिखित जोड़ें:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

उपर्युक्त चरणों को npm-g_nosudo से करने के लिए npm-g_nosudo

नवीनतम अपडेट के लिए github.com/sindresorhus/guides/blob/master/… के github.com/sindresorhus/guides/blob/master/… चेकआउट करें।


जॉन पापा इस मुद्दे के पीछे इतिहास और तर्क को इंगित करते हैं और एक ठोस फिक्स देता है :

जॉन पापा के कदम हैं:

  1. एनपीएम के बिना नोड स्थापित करने के लिए ब्रू का प्रयोग करें
  2. एनपीएम और नोड को जाने के लिए अपना .bash_profile / .bashrc अपडेट करें, जहां संकुल को स्थापित करना और ढूंढना है
  3. खुद को अपडेट करने के लिए नोड और एनपीएम अपडेट करने के लिए ब्रू का प्रयोग करें

उम्मीद है कि यह उत्सुक मदद करता है!


दरअसल, मुझे भी यही समस्या थी। मैं उबंटू चला रहा था। मेरी समस्या उत्पन्न होती है क्योंकि मैं उबंटू की अपनी सार्वजनिक कुंजी खो देता था। यहां तक ​​कि मेरा सिस्टम अपडेट नहीं हो रहा था। यह जीपीजी त्रुटि दे रहा था। उस स्थिति में, आप इस आदेश का उपयोग कर अपनी कुंजी वापस प्राप्त कर सकते हैं:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

उसके बाद एनपीएम ठीक काम करता है!


बूटस्ट्रैप 3 के लिए मेरे सीएसएस को संकलित करने के लिए मुझे अवकाश ( https://github.com/twitter/recess ) इंस्टॉल करते समय इसका सामना करना पड़ा।

अवकाश स्थापित करते समय:

-npm install recess -g
  1. आपको अपनी home निर्देशिका में अनुमतियां अनलॉक करने की आवश्यकता है, जैसे कहता है:

    sudo chown -R `whoami` ~/.npm
    
  2. आपको node_modules निर्देशिका में लेखन अनुमतियों की भी आवश्यकता है, जैसे node_modules कहते हैं, इसलिए यदि यह अभी भी काम नहीं कर रहा है, तो कोशिश करें:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. यदि आप अभी भी त्रुटियां देख रहे हैं, तो आपको /usr/local अनुमतियों को सही करने की भी आवश्यकता हो सकती है:

    sudo chown -R `whoami` /usr/local
    

कृपया ध्यान दें कि जैसा कि आप इस पोस्ट /usr/local/ में इंगित करते हैं , वास्तव में एक सिस्टम डीआईआर नहीं है यदि आप मैक पर हैं, तो, यह जवाब वास्तव में मैक उपयोगकर्ताओं के लिए पूरी तरह से "सुरक्षित" है। हालांकि, यदि आप लिनक्स पर हैं, तो क्रिस्टोफर विल का उत्तर बहु-उपयोगकर्ता अनुकूल, सिस्टम डीआईआर सुरक्षित (लेकिन अधिक जटिल) समाधान के लिए नीचे देखें।


मुझे क्या लगता है कि सबसे अच्छा विकल्प एनपीएम दस्तावेज में सुझाया गया है, जो पहली बार यह जांचना है कि npm config get prefix चलाकर डिफ़ॉल्ट रूप से वैश्विक node_modules इंस्टॉल किए गए npm config get prefix । यदि आप पाते हैं, जैसे मैं ट्रस्टी /usr पर करता हूं, तो आप इसे उस फ़ोल्डर में बदलना चाहेंगे जिसे आप सुरक्षित तरीके से अपने तरीके से गड़बड़ कर सकते हैं।

ऐसा करने के लिए, अपने सिस्टम में एक नया फ़ोल्डर चुनें या बनाएं। आप इसे अपनी होम निर्देशिका में या मेरे जैसे, स्थिरता के लिए /usr/local के रूप में रखना चाहते हैं क्योंकि मैं मैक उपयोगकर्ता भी हूं (मुझे उस मशीन के आधार पर अलग-अलग स्थानों को देखने की आवश्यकता नहीं है, जिसमें मैं होना चाहता हूं के सामने)। ऐसा करने का एक और अच्छा कारण यह तथ्य है कि /usr/local फ़ोल्डर शायद आपके पैथ में पहले से ही है (जब तक कि आप अपने पैथ के साथ गड़बड़ नहीं करना चाहते) लेकिन संभावना है कि आपका नव निर्मित फ़ोल्डर नहीं है और आपको इसकी आवश्यकता होगी इसे अपने .bash-profile या .bashrc फ़ाइल पर स्वयं पाथ में जोड़ें।

लंबी कहानी छोटी, मैंने npm config set prefix '/usr/local' साथ वैश्विक मॉड्यूल का डिफ़ॉल्ट स्थान बदल दिया, फ़ोल्डर /usr/local/lib/node_modules (यह /usr/local/lib/node_modules द्वारा उपयोग किया जाएगा) बनाया और फ़ोल्डर के लिए अनुमतियां बदल दी आदेश के साथ एनपीएम द्वारा प्रयोग किया जाता है:

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

अब आप वैश्विक स्तर पर किसी मॉड्यूल को सुरक्षित रूप से इंस्टॉल कर सकते हैं। उम्मीद है की यह मदद करेगा!


मेरे मामले में, यह ~ / tmp की अनुमति के कारण है। इसलिए मैं करता हूं:

sudo chown -R $USER ~/tmp

और यह ठीक है!


मैंने पाया कि यदि आप केवल sudo -s "यह सिर्फ एक कदम के रूप में रूट अनुमतियों के साथ एक खोल खोलता है" और यह वास्तव में मेरे लिए काम करता है। मुझे नहीं पता कि यह एक अच्छा अभ्यास है या नहीं।

मुझे उम्मीद है यह मदद करेगा।

संदर्भ: https://apple.stackexchange.com/posts/14423/revisions


मैक ओएस एक्स पर, brew install npm Homebrew's brew install npm साथ brew install npm , इंस्टॉलेशन पथ /usr/local/share/npm/ lib/node_modules/ bin/ lib/node_modules/ subfolders दोनों के साथ lib/node_modules/

वर्तमान में लॉग इन किए गए उपयोगकर्ता को स्वामी में बदलने के लिए इस कमांड को चलाने से इसे सब ठीक कर देना चाहिए, और आपको बिना सोडो के वैश्विक एनपीएम पैकेज इंस्टॉल करने की अनुमति मिलनी चाहिए।

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

osx homebrew


यदि sudo chown -R $(whoami) ~/.npm आपके लिए काम नहीं करता है, या आपको एक गैर टर्मिनल कमांड समाधान की आवश्यकता है।

मुद्दा यह है कि आपके उपयोगकर्ता खाते में node_modules फ़ोल्डर को लिखने की अनुमति नहीं है, इसलिए आप निम्न कार्य कर सकते हैं

  1. खुला खोजक और cmd + shift + g दबाएं यह यूआरएल के साथ फ़ोल्डर में खुल जाएगा

  2. निम्न पथ /usr/local/lib/node_modules और जाएं दबाएं

  3. node_modules फ़ोल्डर पर राइट क्लिक करें और Get Info चुनें

  4. sharing & permissions अनुभाग में स्क्रॉल करें

  5. परिवर्तन करने में सक्षम होने के लिए अनलॉक करें।

  6. + दबाएं और अपना उपयोगकर्ता खाता जोड़ें

  7. सुनिश्चित करें कि आप विशेषाधिकार ड्रॉप डाउन में Read & Write चुनें

अब आप sudo बिना पैकेज स्थापित करने में सक्षम होना चाहिए और अनुमति मुद्दों को हल किया जाना चाहिए


यदि निर्देशिका /usr/local/lib/npm_modules लिए अनुमतियों को बदलने में मदद नहीं मिलती है, तो आपको अपने उपयोगकर्ता को समूह में जोड़ना चाहिए (ज्यादातर मामलों में यह staff समूह है), जिसमें /usr/bin निर्देशिका के लिए rwx अधिकार हैं। क्योंकि एनपीएम /usr/bin/__package__ साथ symlink बनाने की कोशिश करता है।

पीएस उपयोगकर्ता समूह बदलने के बाद relogin भूलना मत भूलना


यह आपकी होम निर्देशिका में अनुमतियों की तरह दिखता है। .npm निर्देशिका निष्पादन के स्वामित्व को पुनः प्राप्त करने के लिए:

sudo chown -R $(whoami) ~/.npm

यह वह समाधान है जिसका मैंने उपयोग किया और काम किया। मैंने whoami कभी काम नहीं किया, whoami उपयोग करने की कोशिश की।

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

फिर

sudo chown -R $USER /usr/local/bin/npm

फिर

sudo chown -R $USER /usr/local/bin/node


सर्वश्रेष्ठ समाधान यह होगा जो एनपीएम दस्तावेज द्वारा प्रदान किया जाता है।

उबंटू के लिए सुझाव दिया गया समाधान विकल्प # 2 है

संक्षिप्त कदम:
वैश्विक प्रतिष्ठानों के लिए निर्देशिका बनाएं:
mkdir ~/.npm-global

नई निर्देशिका पथ का उपयोग करने के लिए एनपीएम कॉन्फ़िगर करें:
npm config set prefix '~/.npm-global'
npm config get prefix आपको सत्यापित करने में सहायता कर सकता है कि उपसर्ग अद्यतन किया गया था या नहीं। नतीजा <आपकी होम निर्देशिका> / एनपीएम-ग्लोबल होगा

एक ~ / .profile फ़ाइल खोलें या बनाएं और यह पंक्ति जोड़ें:
export PATH=~/.npm-global/bin:$PATH

कमांड लाइन पर वापस, अपने सिस्टम चर अद्यतन करें:
source ~/.profile

चरण 2-4 के बजाय आप संबंधित एनएनवी चर का भी उपयोग कर सकते हैं (उदाहरण के लिए यदि आप ~ / .profile को संशोधित नहीं करना चाहते हैं):

NPM_CONFIG_PREFIX=~/.npm-global

मैक सुझाए गए समाधान के लिए Option#3

मैक ओएस पर आप होमब्री पैकेज मैनेजर का उपयोग करके पूरी तरह से इस समस्या से बच सकते हैं

brew install node


ध्यान रहे!!! ध्यान रहे!!! ध्यान रहे!!!

सुरक्षा-जोखिम की वजह से चोटी या चमोद समाधान नहीं है।

इसके बजाय ऐसा करें, करें:

सबसे पहले चेक करें, जहां एनपीएम इंगित करता है, अगर आप कॉल करते हैं:

npm config get prefix

अगर / usr वापस आ गया है, तो आप निम्न कार्य कर सकते हैं:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

यह आपके होम-डायरेक्टरी में एनपीएम-डायरेक्टोरी बनाता है और इसके लिए एनपीएम पॉइंट करता है।

यह परिवर्तन स्थायी होने के लिए, आपको अपने .bashrc में export-command जोड़ना होगा:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc




sudo