एनपीएम मॉड्यूल सुडो के बिना विश्व स्तर पर स्थापित नहीं होंगे


126

मैंने केवल Ubuntu 12.04 LTS को फिर से इंस्टॉल किया है, और इससे पहले कि मैं ये कदम उठाता हूं :

  1. निम्न स्क्रिप्ट के साथ पैकेज मैनेजर के माध्यम से स्थापित नोड

    sudo apt-get update
    
    sudo apt-get install python-software-properties python g++ make
    
    sudo add-apt-repository ppa:chris-lea/node.js
    
    sudo apt-get update
    
    sudo apt-get install nodejs
    
  2. विश्वभर में तुर्क, एक्सप्रेस, एन, तुर्क के जनरेटर स्थापित करने की कोशिश की और उन सभी ने एक ही त्रुटि वापस कर दी

    npm ईआरआर! त्रुटि: EACCES, सिमिलिंक '../lib/node_modules/n/bin/n'

    npm ईआरआर! {[त्रुटि: EACCES, सिमलिंक '../lib/node_modules/n/bin/n'] इरनो: 3, कोड: 'EACCES', पथ: '../lib/node_modules/n/bin/n'}}

    npm ईआरआर!

    npm ईआरआर! कृपया इस कमांड को रूट / एडमिनिस्ट्रेटर के रूप में फिर से चलाने का प्रयास करें।

    npm ईआरआर! सिस्टम लिनक्स 3.8.0-29-जेनेरिक

    npm ईआरआर! कमांड "/ usr / बिन / नोड" "/ usr / बिन / npm" "स्थापित करें" "-g" "-d" n "

    npm ईआरआर! cwd / home / heberlz

    npm ईआरआर! नोड -v v0.10.20

    npm ईआरआर! npm -v 1.3.11

    npm ईआरआर! रास्ता ../lib/node_modules/n/bin/n

    npm ईआरआर! कोड EACCES

    npm ईआरआर! गलत 3

    npm ईआरआर! स्टैक त्रुटि: EACCES, सिमिलिंक '../lib/node_modules/n/bin/n'

    npm ईआरआर!

    npm ईआरआर! अतिरिक्त लॉगिंग विवरण में पाया जा सकता है:

    npm ईआरआर! /home/heberlz/npm-debug.log

    npm ईआरआर! ठीक कोड नहीं 0

  3. निम्नलिखित फ़ोल्डरों की पुनरावर्ती स्वामित्व पुनरावर्ती ~ / .npm, / usr / lib / नोड, / usr / lib / node_modules, और निम्नलिखित सिमलिंक / usr / बिन / नोड, / usr / बिन / नोड्ज के पूर्ण स्वामित्व में कोई सफलता नहीं है

मुझे सूडान और उसके जनरेटर को सूडो के बिना स्थापित करने की आवश्यकता है ताकि बाद में परेशानी न हो :(


धन्यवाद फिल, अब यह बहुत बेहतर लग रहा है
HeberLZ

2
अगर आप चाहते हैं कि npm / usr के बजाय $ HOME में वैश्विक पैकेज स्थापित करें, तो गाइड का अनुसरण करें github.com/sindresorhus/guides/blob/master/…
कर्नल पैनिक

यह मेरे लिए काम किया है github.com/nodejs/node-v0.x-archive/issues/… :ln -s /usr/bin/nodejs /usr/bin/node
LoELc MICHEL

जवाबों:


318

Ubuntu 12.04 और मेरे लिए निम्नलिखित कार्यों को स्थापित करने के लिए क्रिस ली के पीपीए का उपयोग करना:

npm config set prefix '~/.npm-packages'

और $ PATH में $ HOME / .npm- पैकेज / बिन जोड़ रहा है

जोङना .bashrc

export PATH="$PATH:$HOME/.npm-packages/bin"

@passy से https://stackoverflow.com/a/18277225 देखें


9
यह एक बहुत क्लीनर समाधान की तरह दिखता है। यदि आपको अपने होम डायरेक्टरी में सिस्टम-फोल्डर पसंद नहीं है, तो आप किसी लोकेशन जैसे ~ / .local / share / npm का भी उपयोग कर सकते हैं।
जीरोहेंक

यह ध्यान दिया जाना चाहिए कि आप उपसर्ग को बदलने के बाद, आपको उन सभी वैश्विक मॉड्यूल को फिर से स्थापित करना चाहिए जिन्हें आपने पहले स्थापित किया था, जिसमें एनपीएम भी शामिल है।
डेज़ियामिड

यह ठीक लगता है, लेकिन मुझे उपयोगकर्ता को लिखने की अनुमति देना बहुत आसान लगा /usr/lib/node_modules/। या शायद एक नोडजेस यूनिक्स समूह बनाने के लिए भी उपयुक्त है और उस समूह को उस निर्देशिका को लिखने की अनुमति दें।
मेहुलकर

ऐड के लिए एक छोटा सा विस्तार आप करना है कर ~ / NPM निर्देशिका अपने आप को। Else, npm एक ENOENT त्रुटियों से बाहर निकलेगा।
जेसन फ़र्नस्वर्थ

6
यह npm के लिए डिफ़ॉल्ट क्यों नहीं है? साझा करने के लिए धन्यवाद।
डोरियन

23

यदि आप पहले से ही $HOME/binअपने रास्ते में हैं, तो एक सरल उपाय सिर्फ ...

npm config set prefix ~
  • नया नोड कमांड अब आपकी $HOME/binनिर्देशिका में स्थापित हो जाएगा ।
  • अपना रास्ता बदलने की जरूरत नहीं!

चूँकि यह चर्चा वास्तव में चलने के सुरक्षा जोखिमों को कम करने के बारे में है sudo, इसलिए आपको यह भी पता होना चाहिए कि कोई भी नोड ऐप संभावित रूप से एक ऐप नाम स्थापित कर सकता है जो आपके द्वारा इंस्टॉल किए गए पंजीकृत नोड पैकेज नाम से मेल नहीं खाता है। इसलिए एक सुरक्षा जोखिम है npm installजो मौजूदा सिस्टम कमांड या आपके पास पहले से मौजूद एक को बदल देगा $HOME/bin। यदि आप चिंतित हैं, तो जिस ऐप को आप इंस्टॉल कर रहे हैं , उसकी फ़ाइल में binऔर उसके scriptsगुणों की जाँच करें package.json

सामान्य तौर पर, यह सबसे सुरक्षित है:

  • (ए) $HOME/binआपके सिस्टम में अंतिम स्थान पर है, इसलिए सिस्टम कमांड का उपयोग नहीं किया जाता है।
  • (बी) में शामिल नहीं है "।" या आपके किसी भी रिश्तेदार पथ में $PATHआप गलती से एक कमांड नहीं चलाते हैं जो वर्तमान निर्देशिका में होता है।

संदर्भ:


1
इसके साथ एक अन्य महत्वपूर्ण सुरक्षा मुद्दा npmयह है कि github.comनोड पैकेज के लिए रेपो पर आपके द्वारा देखा जाने वाला स्रोत कोड वही कोड नहीं हो सकता है जो आप npm.orgरजिस्ट्री सर्वर से इंस्टॉल कर रहे हैं !
टोनी ओ'हागन

हालांकि सिद्धांत रूप में एक अच्छी तरह से तैयार नोड पैकेज खुशी से स्थापित होगा ~/bin, कुछ नोड पैकेज (या उनके आश्रित पैकेज) को केवल परीक्षण के रूप में स्थापित किया गया है sudoताकि आपको पता चले कि आप एक "इंस्टॉलेशन वातावरण" समस्या का सामना कर सकते हैं। किसी भी अन्य पर्यावरणीय मुद्दे (जैसे OS का परिवर्तन) की तरह "एक बार लिखो, हर जगह परीक्षण करो" का सिद्धांत अभी भी सही है।
टोनी ओ'हागन

इस विधि का नुकसान npm है, एक अतिरिक्त निर्देशिका बनाता है, जिसे ~ / lib कहा जाता है। आपके संगठन प्रथाओं के आधार पर, यह वांछनीय नहीं हो सकता है।
श्री एस

13

अक्टूबर 2014 तक:

Node.js NodeSource डेबियन और उबंटू बाइनरी वितरण रिपॉजिटरी से उपलब्ध है

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

बस।

आउटडेटेड उत्तर:

सुडो का उपयोग किए बिना सबसे तेज़ तरीका इसहाक द्वारा यहां वर्णित है

मैं आपको सोंडो के साथ पैकेज प्रबंधन न करने के लिए दृढ़ता से प्रोत्साहित करता हूं! पैकेज मनमानी स्क्रिप्ट चला सकते हैं, जो एक चेन मैनेजर के बाल कटवाने के रूप में एक पैकेज मैनेजर कमांड को सुरक्षित बनाता है। निश्चित रूप से, यह तेज़ है और निश्चित रूप से किसी भी बाधा के माध्यम से कटौती करने जा रहा है, लेकिन आप वास्तव में चाहते हैं कि बाधा वहां रह सकती है।

मैं इसके बजाय एक बार ऐसा करने की सलाह देता हूं:

sudo chown -R $USER /usr/local

संपादित करें:

वर्तमान उपयोगकर्ता के लिए / usr / स्थानीय के स्वामित्व को बदलने के बारे में कुछ सुरक्षा चिंताएँ और कार्यक्षमता सीमाएँ हैं:

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


23
यह एक बुरा विचार है क्योंकि यह सभी / usr / स्थानीय को एक ही उपयोगकर्ता से संबंधित बनाता है।
रीड जी।

4
जैसा कि @ ReedG.Law ने बताया, यह वास्तव में एक बुरा विचार है। किसी विशिष्ट उपयोगकर्ता के लिए / usr / स्थानीय के hte स्वामित्व को न बदलें।
क्रिस्टोफर

3
मुझे रीड जी लॉ से सहमत होना होगा - बदलना / usr / लोकल एक BAD BAD BAD आइडिया है। मेरे मामले में मैं निर्देश देख रहा था और ऐसा किया: फिर याद किया कि मुझे विकास करने वाले किसी अन्य व्यक्ति के साथ इसे साझा करना है। मैं वापस गया और (उम्मीद है) सभी बदलाव हुए। यह सिर्फ सुरक्षा नहीं है, बल्कि कार्यक्षमता भी है।
लॉयड सार्जेंट

3
क्या इस समाधान का कोई नकारात्मक पहलू है अगर सिस्टम पर केवल एक उपयोगकर्ता है?
कोनरबोड

2
क्षमा करें, का मतलब है /usr/local/lib/node_modulesऔरnode
Creynders

11

मुद्दा था मैं sudo का उपयोग करके नोड स्थापित किया गया था , त्रुटियों से बचने के लिए जब npm मॉड्यूल को विश्व स्तर पर स्थापित करना हो तो sudo के साथ नोड स्थापित करें।

मेरा समाधान इस तरह से नोड को फिर से स्थापित करना था :

नोडज ..org # से मेरे मामले नोड- v0.10.20.tar.gz से नवीनतम स्थिर नोड स्रोत डाउनलोड करें

tar -zxf नोड-v0.10.20.tar.gz #uncompress के स्रोत

सीडी नोड- v0.10.20 #enter असम्पीडित फ़ोल्डर

sudo chown -R $ USER / usr / स्थानीय

./configure --prefix = / usr / लोकल && मेक && मेक इनस्टॉल

ध्यान देने वाली एक बात यह है कि केवल / usr / स्थानीय फ़ोल्डर का स्वामित्व लेना मेरे मामले में काम नहीं करेगा क्योंकि नोड इंस्टॉलेशन स्वयं sudo के साथ बनाया गया था

तुमान स्थापित करने के लिए अंतिम चरण: # अलोमैन। योआन में कहा गया है कि "npm install -g yo" करने से पहले से ही बोवर और ग्रंट स्थापित हो जाता है, वहाँ कुछ गुनगुनाएं हैं जो कि विफल हो जाती हैं, इसलिए मैंने तय किया कि अपने आप स्थापित करके

npm स्थापित -g बोवर

npm स्थापित -g ग्रंट

npm स्थापित -g यो

npm स्थापित -g जनरेटर-कोणीय


सिद्धांत रूप में महान, लेकिन क्या नोड को बनाने और 4 अतिरिक्त मॉड्यूल स्थापित करने के लिए मजबूर किए बिना उसी प्रभाव को प्राप्त करने का कोई तरीका है जो विश्व स्तर पर मॉड्यूल तक पहुंच है?
दान निसानबाम

चयनित उत्तर आपकी आवश्यकतानुसार काम करता है। यह वही है जो मैंने 2 साल पहले किया था जब अभी तक कोई अन्य सार्वजनिक समाधान नहीं था, लेकिन अब यह बेकार है
HeberLZ

5

मैंने पर्यावरण चर और शेल उपनाम के साथ इस समस्या को हल किया:

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

मेरे लिए npm ने .npmrc में "प्रीफिक्स" कॉन्फिग सेटिंग का सम्मान नहीं किया।


2

इस तरह के एसओ पद के अनुसार: एनपीडी बिना सूडो के त्रुटि करता है

ऐसा लगता है कि आपके पास ~/.npmनिर्देशिका के साथ स्वामित्व समस्या हो सकती है ।

उस एक में उत्तर के साथ, कोशिश करें:

sudo chown -R `whoami` ~/.npm

वास्तव में यह काम नहीं करता था जैसा कि मैंने चरण 3 के बारे में बताया कि जब मैंने कोशिश की थी कि मैं इसे काम नहीं कर सकता था, तो मुद्दा यह था कि मैंने sudo का उपयोग करके नोड स्थापित किया था, जो कुछ परिस्थितियों में परेशानी पैदा कर सकता है। एक बार जब मैंने नोड को हटा दिया था और इसे अपने स्रोतों से पुनः स्थापित किया, तो सब कुछ उम्मीद के मुताबिक काम करना शुरू कर दिया!
हेबरलज़

@ हेबरएलज मुझे लगता है कि आप सही हैं, मैंने कल रात एक और मशीन पर ऐसा करने की कोशिश की और यह काम नहीं कर रहा था। मेरे पास इससे निपटने के लिए अन्य अनुमति मुद्दे भी थे। अभी भी यकीन नहीं है कि स्रोत से एनपीएम स्थापित करने के लिए सबसे अच्छा तरीका क्या है।
प्रशस्तिव

टिप्पणियों में प्रश्न से लिंक करें या वर्तमान प्रश्न को डुप्लिकेट के रूप में चिह्नित करें। यह अन्य प्रश्नों के उत्तरों को कॉपी-पेस्ट करने में मदद नहीं करता है।
गिवंसी

@HeberLZ इस एवेर का नीच निर्दोष है क्योंकि यह आपके द्वारा किए गए प्रश्न के शीर्षक को संबोधित करता है।
सेबेस्टियन सस्त्रे

मुझे याद नहीं है कि जब मैंने उत्तर को अस्वीकृत कर दिया था, लेकिन मेरे विशेष मामले में आपने जो लिखा था वह समस्या को ठीक नहीं करता है, इस कारण से मुझे लगता है कि मैंने शायद उत्तर को अस्वीकार कर दिया है। जैसा कि इस प्रश्न पर कहा गया है: "निम्नलिखित फ़ोल्डरों का पुनरावर्ती स्वामित्व पुनरावर्ती ~ / .npm, / usr / lib / नोड, / usr / lib / node_modules, और निम्नलिखित सिमिलिंक / usr / बिन / नोड, / usr / बिन / के पुनः प्राप्त स्वामित्व। पूरी तरह से सफलता के साथ नोड्ज "मैंने .npm का स्वामित्व हासिल करने की कोशिश नहीं की, और सफलता के बिना उन सभी अन्य फ़ोल्डरों
HeberLZ

2

Npm की निर्देशिका का मार्ग खोजें:

npm config get prefix

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

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

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

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

यहाँ पूर्ण विवरण के लिए लिंक दिया गया है

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


महत्वपूर्ण। कोष्ठक में जोड़ने binऔर से बचने की कोशिश करें share। अनदेखा करने से इस फ़ोल्डर का स्वामित्व वर्तमान उपयोगकर्ता को बदल सकता है और नए पैकेजों को सिस्टम में स्थापित करने में समस्या sudoहो सकती है क्योंकि यह स्वामित्व भी बदल जाएगा
A.Ametov


1

यदि आप एक विकासशील मशीन पर हैं, तो आप nvm का उपयोग करने पर विचार करने से बेहतर हो सकते हैं ।

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

जो भी हो, मैं इस जवाब को स्टैकओवरफ़्लो पर जाँचने की सलाह दूंगा


1

असल में, मैंने बस एक उपयोगकर्ता फ़ोल्डर की अनुमति को बदल दिया था जो रूट के स्वामित्व में था:

sudo chown -R $USER ~/.config/configstore

तब मैं बिना sudo के "npm install" और "bower install" कर सकता था! ठीक काम किया!


0

14.04.3 lubuntu का उपयोग करते हुए, मैंने .npm और npm उपसर्ग के स्वामित्व को बदलने की कोशिश की, अपने पथ को अपडेट किया, npm ने मेरे होम डायरेक्टरी को sudo के बिना इंस्टॉल किया, लेकिन पथ गलत था इसलिए अंगारे जैसे मॉड्यूल नहीं मिले, linuxbew ने समस्या को हल किया, त्वरित नोड / एनपीएम के लिए यहां सेटअप गाइड


0

यह समस्या और उसी कारण से उत्पन्न अन्य समस्या को उपयोगकर्ता स्थान में नोड स्थापित करने से हल किया जा सकता है।

आप इसे केवल अपने टर्मिनल में कॉपी और पेस्ट कर सकते हैं

NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current

Node को नवीनतम संस्करण में अपडेट करने के लिए समान कमांड भी लॉन्च किए जा सकते हैं।

अपने पर्यावरण को संपादित करने के लिए मत भूलना। केवल एक बार, करो

echo "export NODEJS_ROOT=$NODEJS_ROOT"            >> $HOME/.bash_profile
echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now

इस लेख को एक रीबाउट के रूप में देखें कि बिना सूडो के Node.js कैसे स्थापित करें

इस विषय के बारे में अधिक सामान्य समाधान के लिए (यानी, स्थानीय रूप से सॉफ़्टवेयर इंस्टॉल करें) डॉट्सवेयर देखें ।


0

बस nvm का उपयोग करें आप विभिन्न नोड संस्करणों के बीच गतिशील रूप से स्विच करने में सक्षम होंगे और यह आपके उपयोगकर्ता के लिए स्थानीय रूप से स्थापित है। किसी सूडो की जरूरत नहीं बस यह सुनिश्चित करें कि आपने पहले से पुराने नोड को पूरी तरह से साफ कर दिया है।

https://github.com/nvm-sh/nvm


-2

सबसे अच्छा समाधान मुझे मिला था कि उपयोगकर्ता होम डायरेक्टरी पर टार पैकेज से Node.js स्थापित करना और लिबास फ़ोल्डर स्थान लिंक करना। यहाँ है आपको क्या करने की जरूरत है

यह Nodejs को डिफ़ॉल्ट / usr / स्थानीय / के बजाय ~ / .local / के तहत स्थापित करेगा

Add this to your ~/.npmrc (create the file if it doesn't exist already):

root =    /home/YOUR-USERNAME/.local/lib/node_modules
binroot = /home/YOUR-USERNAME/.local/bin
manroot = /home/YOUR-USERNAME/.local/share/man
Download the Nodejs source code from nodejs.org and install it under your ~/.local tree:

tar xf node......
cd node........
./configure --prefix=~/.local
make
make install

Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I'm not sure why Node doesn't search ~/.local/lib/node_modules by default.)

cd
ln -s .local/lib/node_modules .node_modules
Is ~/.local/bin in your path? Type

which npm
If it says ~/.local/bin/npm, you're done.

Otherwise, do this...

export PATH=$HOME/.local/bin:$PATH
...and add that line to your ~/.profile file, so it'll run every time you log in.

यदि आप अभी भी पैकेज स्थापित करते समय स्वामित्व या अनुमति त्रुटि का सामना करते हैं, तो ~ / .local / dir के स्वामित्व को बदलकर चलाएं

chown -R user:user ~/.local/

अब आपको 'npm' के माध्यम से संकुल संस्थापित करना अच्छा होना चाहिए

ध्यान दें: ABOVE कमानों के सभी उपयोगकर्ता के रूप में रन के लिए हैं। सूद या रूट लोगो का उपयोग न करें

कभी भी 'फोल्डर्स UNDER' / USR / LIB / 'की परिभाषा में परिवर्तन न करें। अविश्वसनीय ओएस के लिए नेतृत्व किया जाएगा


1
Tnovelli.net/blog/blog.2011-08-27.node-npm-user-install.html से बिना किसी विशेषता के नकल की गई ।
तोबू

-2

मुझे लगता है कि पावेल ग्राज़ीबेक के स्पष्टीकरण बहुत ही ठोस हैं: वे 3 सरल सूडो कमांडों को उबालते हैं, कभी भी वैश्विक npm संस्थापन के लिए फिर से sudo का उपयोग नहीं करते हैं:

sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.