npm वैश्विक पथ उपसर्ग


142

मैं सामान्य से अधिक सतर्क रहा हूं क्योंकि मैं npmअतीत के व्यवहार से भ्रमित हो गया हूं ।

मैं एक पर हूँ MAC और नोड के माध्यम से स्थापित किया है brew install node। Js ।

अब जब मैं jslint.jsकमांड-लाइन पर चलना चाहता हूं , तो कमांड के रूप में jslintमुझे लगता है कि इसे पूरा करने के लिए विहित तरीका है sudo npm install -g jslintजो इस तरह से सफलतापूर्वक चलाया गया है:

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

इसके बाद

$ jslint ply.js
zsh: command not found: jslint

/usr/local/share/npm/binमेरे में नहीं होने के कारण $PATH

1) पथ के लिए brewवैश्विक npm binपथ स्थापित क्यों नहीं किया ? शायद यह किया था, लेकिन कुछ zshकरता है यह गड़बड़ कर रहा है। मैं कहाँ मिल सकता है?
2) क्या मुझे ऐसा करना चाहिए? ( मेरे तल पर :/usr/local/share/npm/binनिर्यात $PATHमें संलग्न ~/.zshrc)

ऐसा लगता है कि यह ऐसा करने का सही तरीका नहीं है क्योंकि अगर मैं बाद में कुछ और स्थापित करता हूं (होमब्रे या कुछ का उपयोग करके) तो मुझे पथ को सेट करने के लिए इसे अपने ज़ीएस स्टार्टअप स्क्रिप्ट में संलग्न करने की आवश्यकता होगी। मुझे लगता है कि इस विशेष उदाहरण में यह सिर्फ npm install -g"उचित" स्थान ( /usr/local/binशायद की तरह ) में सही सिमिलिंक नहीं बनाने की बात है ।

मुझे लगता है कि मैं जो भी करूंगा, वह मैन्युअल रूप से /usr/local/binकिसी भी प्रोग्राम के लिए सिम्बलिंक्स का निर्माण करेगा जिसमें मुझे परेशानी होती है और यह मेरे उद्देश्यों के लिए पर्याप्त होना चाहिए।

संपादित करें : मैं इसे 2019 में अपडेट कर रहा हूं, क्योंकि यह पुराना प्रश्न लोकप्रिय है, लेकिन अब मेरे व्यक्तिगत वर्कफ़्लो के संदर्भ में पुराना है और यह भी कि नोड स्थापित करने और इसकी विभिन्न निर्भरताओं को प्रबंधित करने के बारे में सबसे अच्छा कैसे जाना जाता है।

मेरा व्यक्तिगत वर्कफ़्लो अब नोडज से प्राप्त इंस्टॉलर का उपयोग करने के लिए है। सिस्टम पर नोड स्थापित करने के लिए। मैं वास्तव में होमब्रेव पैकेज की तुलना में इस पर अधिक भरोसा करता हूं, क्योंकि यह सबसे अच्छा जानता है कि फाइलों को कैसे प्रबंधित किया जाए। यदि आप अपने सिस्टम नोड को 8.10 से 10.15 में बदलना चाहते हैं, चाहे मैक या विंडोज पर, अपने ओएस के लिए केवल 10.15 के लिए नोडज से इंस्टॉलर डाउनलोड करें। Homebrew के माध्यम से स्थापित नोड को अपग्रेड करने का प्रयास हमेशा मेरे अनुभव में एक अधिक कठिन दृष्टिकोण साबित हुआ है।

इसके अलावा, सबसे बड़ी बात यह है कि ऊपर दिए गए jslint उदाहरण में मेरे npm इंस्टॉलेशन में दिखाए गए sudo का उपयोग अत्यधिक हतोत्साहित करता है; मैं पूरी तरह से निश्चित हूं कि होमब्रे पैकेज को कभी भी सुपरयूज़र का उपयोग करके किसी भी तरह से स्थापित या इंटरैक्ट नहीं किया जाना चाहिए। यह आवश्यक नहीं होना चाहिए, और अनुमति दर्ज करने के लिए नेतृत्व करेंगे सिरदर्द!

इसके अलावा मैं jslint पर ESLint की सलाह देता हूं, और वर्षों में jslint का उपयोग नहीं किया है।


धन्यवाद, वे अब तय कर रहे हैं। मैं आमतौर पर लापरवाह नहीं हूं, लेकिन मैंने इस सवाल को बहुत जल्दी टाइप किया
स्टीवन लू

@DaveNewton मैं आमतौर पर यही करता हूँ, हाँ। यह सवाल एक असली मैला था, लेकिन यह मेरे सबसे लोकप्रिय लोगों में से एक है।
स्टीवन लू

स्क्रीनशॉट की तुलना में पाठ को कॉपी करना आसान नहीं है? वैसे भी तय है।

1
@ saleemrashid1 ​​अरे मैं यह करने के लिए अर्थ था। क्या आपने वास्तव में इसे पढ़ा और इसे कॉपी किया? धन्यवाद।
स्टीवन लू

3
हां! आपका स्वागत है। मैं एक गेम पर काम कर रहा हूं और जब मैं एनपीएम के लिए इंतजार कर रहा था, तो मैंने जो सामान डाउनलोड किया, वह मैंने किया!

जवाबों:


308

अपना विस्तार PATH:

export PATH=/usr/local/share/npm/bin:$PATH

एक भयानक विचार नहीं है। ऐसा करने के बाद, आपको ऐसा नहीं करना चाहिए।

इसे चलाओ:

npm config get prefix

OS X पर डिफ़ॉल्ट है /usr/local, जिसका अर्थ है कि npm बायनेरिज़ में सहानुभूति रखेगा /usr/local/bin, जो कि पहले से ही आपके PATH(विशेषकर यदि आप Homebrew का उपयोग कर रहे हैं) पर होना चाहिए ।

इसलिए:

  1. npm config set prefix /usr/local अगर यह कुछ और है, और
  2. sudoNpm के साथ प्रयोग न करें ! Jslint डॉक्स के अनुसार , आपको बस npm installइसमें सक्षम होना चाहिए ।

अगर आपने npm को sudo ( sudo brew install) के रूप में स्थापित किया है , तो इसे सादे ol के साथ पुनः इंस्टॉल करने का प्रयास करें brew install। Homebrew आप को रखने में मदद करने के लिए माना जाता है sudo


1
धन्यवाद! हालांकि विश्व स्तर पर npmस्थापित करने से इंकार कर दिया jslintnpm install -g jslintविफल रहता है। Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
स्टीवन लू

2
chown /usr/localअगर मुझे कोई स्क्रिप्ट लिखने की आवश्यकता हो तो क्या मुझे इसकी आवश्यकता नहीं होगी sudo? कैसे इस बारे में नामांकित / नोड अप ~/.localया कुछ और सेट करने के लिए ?
स्टीवन लू

2
मिठाई! मैं चला गया और उपयोगकर्ता द्वारा rootमेरे ~/dir ( sudo rm -rपर tmp/और a .npm/) द्वारा जमा किए गए विभिन्न डायरियों को अनजाने में और बाद में npm install -g jslintखूबसूरती से काम किया। यह साफ है कि npm अपने आप में एक नोड प्रोग्राम है और मेरे लिए JS कमांड लाइन प्रूफ-ऑफ-कॉन्सेप्ट का एक सा है, जिसकी मैं अब सराहना करने लगा हूं कि मैं इसे थोड़ा बेहतर समझता हूं।
स्टीवन लू

2
@StevenLu Yep, chown-ing /usr/localऔर इसमें सब कुछ ओएस एक्स पर मानक अभ्यास है । होमब्रे विकी पर समस्या निवारण पृष्ठ देखें ।
ट्रेवर बर्नहैम

हाँ यह कैसा दिखता chownकी आईएनजी /usr/localपहले से ही अन्यथा मेरी मशीन पर आ गई है npmएट अल रन के बिना sudoनहीं में लिंक जमा करने के लिए सक्षम हो जाएगा /usr/local/bin/आदि
स्टीवन लू

8

इस मुद्दे पर कुछ समय बिताया, और PATH स्विच मदद नहीं कर रहा था। मेरी समस्या यहाँ पाई गई Homebrew / नोड / npm बग थी - https://github.com/npm/npm/issues/3794

यदि आपने पहले से ही Homebrew का उपयोग करके नोड स्थापित किया है, तो प्रति टिप्पणी **** ध्यान दें कि यह सुरक्षित नहीं हो सकता है। इसने मेरे लिए काम किया लेकिन इसके अनपेक्षित परिणाम हो सकते हैं। यह भी प्रतीत होता है कि Homebrew का नवीनतम संस्करण npm को ठीक से स्थापित करता है। तो संभावना मैं कोशिश करेगा brew update, brew doctor, brew upgrade nodeआदि प्रयास करने से पहले ****:

npm update -gf

या, यदि आप Homebrew के साथ नोड स्थापित करना चाहते हैं और npm काम करना चाहते हैं, तो उपयोग करें:

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh

3
सशर्त रूप से यह अनुशंसा करना कि विश्व स्तर पर लोगों को एक अद्यतन बल देना एक अच्छा विचार नहीं है।
टॉक्सिक डे

1
आंतरिक रूप से किसी से सलाह लेने के बाद नेत्रहीनता एक अच्छा विचार नहीं है।
Volte

बल विधि पर -ff यह मेरे लिए बनाया है। धन्यवाद।
एमईएम

5

मैं काढ़ा का उपयोग करता हूं और उपसर्ग पहले से ही निर्धारित था:

$ npm config get prefix
/Users/[user]/.node

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

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

तब मैंने सिर्फ अपने .bash_profile के लिए रास्ता जोड़ा है जो / उपयोगकर्ता / [उपयोगकर्ता] पर स्थित है

PATH=$PATH:~/.node/bin

3

काढ़ा पी-एन के साथ चलने पर भी आपको सूप का उपयोग करने की आवश्यकता नहीं होनी चाहिए। यह वास्तव में सड़क के नीचे और अधिक समस्याएं पैदा कर सकता है।

आमतौर पर, काढ़ा या बंदरगाह आपको पथ को अपडेट करने देता है ताकि यह आपके .zshrc, .bashrc, .cshrc, या जो भी आपके द्वारा उपयोग किए जाने वाले शेल का स्वाद गड़बड़ाने का जोखिम न करे।


वास्तव में काढ़ा की आवश्यकता नहीं होती है और इसके उपयोग के खिलाफ सिफारिश की जाती है sudo। मैं sudo का उपयोग कर रहा था npm(क्योंकि कुछ मैंने पढ़ा था)। मुझे इस बात की उत्सुकता है कि रास्ता कहाँ से तय किया जाए। यह वास्तव में ऐसा लगता है कि zshइंस्टॉलर कुछ ऐसा चलाता है जो पथ को हार्डकोड करने पर समाप्त होता है (स्थापना के समय zsh) .zshrcजिसमें मैं इतना पसंद नहीं कर रहा हूं
स्टीवन लू

कुछ भी द्वारा स्थापित npm करना चाहिए में स्थापित किया जा /usr/local/usrपथ नाम स्थान अपने distro की आधिकारिक संकुल के लिए आरक्षित है। /usr/local/binआपके $ PATH या नहीं में, एक zsh मुद्दा है।
फ्लिबी

काढ़ा स्क्रिप्ट आपके स्टार्टअप स्क्रिप्ट में कुछ भी नहीं जोड़ते हैं, यह कुछ ऐसा है जो आपको करने की आवश्यकता है। एक उदाहरण के लिए madebyhoundstooth.com/blog/install-node-with-homebrew-on-os-x देखें ।
पास्कल बेलोनकल

2

मैं निम्नलिखित करके Vue Cli को कोई कमांड त्रुटि ठीक करने में कामयाब रहा:

  • sudo nano ~/.bash_profileअपने bash प्रोफ़ाइल को संपादित करने के लिए टर्मिनल में ।
  • जोड़ना export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • फ़ाइल सहेजें और टर्मिनल को पुनरारंभ करें
  • अब आपको उपयोग करने में सक्षम होना चाहिए vue create my-projectऔर vue --versionआदि।

मैंने इसे https://cli.vuejs.org/ से नवीनतम Vue Cli स्थापित करने के बाद किया।

मैं आमतौर पर यार्न का उपयोग करता हूं, लेकिन मैंने इसे विश्व स्तर पर एनपीएम के साथ स्थापित किया है npm install -g @vue/cli। यदि आप चाहें तो आप यार्न का उपयोग भी कर सकते हैंyarn global add @vue/cli

नोट: यदि आपने पहले से ही इसे स्थापित किया है तो आपको इसे पहले विश्व स्तर पर अनइंस्टॉल करना पड़ सकता है: npm uninstall -g vue-cli

उम्मीद है की यह मदद करेगा!


1
यह मूल रूप से मेरे लिए काम किया। मुझे इसे PATH = $ PATH: / Users / [आपके उपयोगकर्ता नाम] /node_modules/.bin पर निर्यात करने के लिए समायोजित करना था
माइक बढ़ई

1

किसी को भी वही मुद्दा मिला जो इसे ब्रुअ और npm के बीच संघर्ष से संबंधित है कृपया इस समाधान की जाँच करें https://gist.github.com/DanHerbert/9520689


0

चलाने की कोशिश करें:

PATH=$PATH:~/npm/bin

और फिर expressकमांड लाइन में चलाकर एक परीक्षण करें । इसने मेरे लिए काम किया।


बहुत यकीन है कि आप ~/.npm/binया कुछ इस तरह का मतलब है । वहाँ npmअपने घर dir में जोड़ा एक dir नहीं होना चाहिए ।
स्टीवन लू

0

यदि आपने sudo कमांड का उपयोग करके नोड पैकेज को लिंक किया है

फिर उस फ़ोल्डर पर जाएं जहां नोड_मॉड्यूल्स विश्व स्तर पर स्थापित हैं।

यूनिक्स प्रणालियों पर वे आमतौर पर / usr / स्थानीय / lib / नोड या / usr / स्थानीय / lib / node_modules में रखे जाते हैं जब विश्व स्तर पर स्थापित किया जाता है। यदि आप NODE_PATH पर्यावरण चर को इस पथ पर सेट करते हैं, तो नोड द्वारा मॉड्यूल पाया जा सकता है।

Windows XP -% USERPROFILE% \ Application Data \ npm \ node_modules Windows 7 -% AppData% \ npm \ नोड_modules

और फिर कमांड चलाएं

ls -l

यह सभी वैश्विक नोड_मॉडल की सूची देगा और आप लिंक किए गए नोड मॉड्यूल को आसानी से देख सकते हैं।


0

सूडो काढ़ा अब एक विकल्प नहीं है, इसलिए यदि आप इस बिंदु पर काढ़ा के साथ स्थापित करते हैं, तो आपको 2 वास्तव में अप्रिय चीजें मिलने वाली हैं: ए: इसे /usr/local/optsया इसके अनुसार स्थापित करना पसंद है , / usr / स्थानीय / साझा। यह पहली बार में एक बड़ी बात नहीं है, लेकिन मेरे पास नोड PATH के साथ समस्याएँ हैं, खासकर जब मैंने एक प्रकार का वृक्ष स्थापित किया है। बी: आप सुडोकू कमांड के साथ अटक जाते हैं जब तक कि आप इसे इस तरह से अनइंस्टॉल और इंस्टॉल नहीं करते हैं या आप बिटनामी से स्टैक प्राप्त कर सकते हैं

मैं स्टैक विकल्प पर इस विधि की सलाह देता हूं क्योंकि अगर आपके पास कई परियोजनाएं हैं तो यह तैयार है। यदि आप प्रीमेड MEAN स्टैक के साथ जाते हैं, तो आपको httpd.conf (XAMPP की तुलना में इस स्टैक में अधिक दर्द) में वर्चुअल होस्ट सेट करना होगा, सामान्य रूप से अपने अतिरिक्त / vhosts.conf और / etc / मेजबानों को अपने अतिरिक्त अपडेट के लिए जोर दें। प्रोजेक्ट करें, जब तक आप अपने सर्वर को रिपीट और रीस्टार्ट नहीं करना चाहते हैं जब आप अपडाउटिंग चीजें कर लेते हैं।


0

सरल उपाय है ...

बस नीचे दिए गए आदेश:

  1. sudo npm config get prefix

    अगर यह ऐसा कुछ नहीं है /usr/local, तो आपको इसे नीचे दिए गए आदेश का उपयोग करके ठीक करने की आवश्यकता है।

  2. sudo npm config set prefix /usr/local...

अब यह 100% ठीक है


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