2013-02-16 17 views
48

मैंने apt-get install nodejs के साथ नोड स्थापित किया। फिर मैंने apt-get install npm के साथ एनपीएम स्थापित किया। अब जब मैं express चलाने का प्रयास मैंExpress.js: ऐसी कोई फ़ाइल या निर्देशिका

$ express 
/usr/bin/env: node: No such file or directory 

मिल मैं यह त्रुटि कैसे ठीक करूं?

उत्तर

106

उबंटू में दो पैकेज इसी तरह के नाम है, नोड और NodeJS रहे हैं।

node इस करता है,

विवरण-एन: शौकिया पैकेट रेडियो नोड कार्यक्रम। नोड प्रोग्राम टीसीपी/आईपी और पैकेट रेडियो नेटवर्क कनेक्शन स्वीकार करता है और उपयोगकर्ताओं को एक इंटरफेस के साथ प्रस्तुत करता है जो उन्हें विभिन्न शौकिया रेडियो प्रोटोकॉल का उपयोग करके रिमोट होस्ट्स के गेटवे कनेक्शन बनाने की अनुमति देता है।

nodejs इस करता है,

विवरण-एन: Node.js घटना-आधारित सर्वर साइड जावास्क्रिप्ट इंजन Node.js के डिजाइन में समान और रूबी की घटना मशीन या पायथन के मुड़ सिस्टम की तरह से प्रभावित है । यह इवेंट मॉडल को थोड़ा आगे ले जाता है - यह लाइब्रेरी के बजाए इवेंट लूप को भाषा निर्माण के रूप में प्रस्तुत करता है। सर्वर कार्यों को संभालने के लिए Node.js को कई उपयोगी पुस्तकालयों के साथ बंडल किया गया है: सिस्टम, ईवेंट, मानक I/O, मॉड्यूल, टाइमर, बाल प्रक्रियाएं, POSIX, HTTP, मल्टीपार्ट पार्सिंग, टीसीपी, DNS, Assert, Path, URL, क्वेरी स्ट्रिंग्स।

फेडोरा भी इसी तरह के पैकेज नामकरण योजना का पालन करता है। इस वजह से, nodejs में बाइनरी को node से nodejs का नाम बदलना पड़ा। हालांकि, यह तकनीकी रूप से कोशेर नहीं है: और अधिकांश नोडजेस प्रोग्राम (और एनपीएम के साथ स्थापित पुस्तकालय) मानते हैं कि नोड बाइनरी node है। यदि आप इसके चारों ओर घूमना चाहते हैं तो सबसे आसान तरीका दोनों को एक साथ जोड़ना है। यदि आप यह मार्ग लेते हैं, तो node पैकेज इंस्टॉल न करें जो एमेच्योर पैकेट रेडियो सामान को संभालता है।

sudo ln -s /usr/bin/nodejs /usr/local/bin/node 

वैकल्पिक रूप से, नोड के मामले में, मैं n का उपयोग करने और node स्थापित करने नहीं सुझाव देना चाहेंगे। बस एनपीएम इंस्टॉल करें (जो नोड स्थापित करेगा), फिर एनपीएम हटा दें, फिर इसे साफ़ करने के लिए उपयुक्त बताएं। ऐसा करने के लिए, बस चलाने

sudo apt-get install npm 
sudo npm install -g n 
sudo n latest 
sudo apt-get --purge remove npm 
sudo apt-get autoremove 

अन्य द्विआधारी distro प्रबंधकों है कि भले nvm की तरह एक खोल स्क्रिप्ट से काम कर रहे हैं, लेकिन मैं व्यक्तिगत रूप से n पसंद करते हैं। n के बारे में सोचें केवल एक चीज के लिए उपयुक्त: नोड बाइनरी जो इसे /usr/local/bin पर स्थापित करता है।

एनपीएम क्यों हटा रहे हैं? नहीं थे। apt-get --purge removeकेवल पैकेज प्रबंधक द्वारा स्थापित चीजों को हटा सकता है। n latest पैकेज प्रबंधक के बाहर काम करता है। यदि आप ऐसा करते हैं तो

  1. संस्करण apt-get का उपयोग कर डिस्ट्रो (डेबियन/उबंटू) द्वारा स्थापित संस्करण है।
  2. संस्करण n latest द्वारा स्थापित संस्करण।

डिस्ट्रो के पुराने संस्करण में कोई बिंदु नहीं है। और, इससे भी बदतर, यदि वह संस्करण काम करता है तो यह संभावित रूप से किसी भिन्न स्थान पर स्थापित हो सकता है और इसमें डेबियन संशोधनों को मानने वाले डेबियन संशोधन हो सकते हैं। या तो दोनों या/लेकिन दोनों का उपयोग करना बेहतर है।

+2

अच्छी व्याख्या। यह सबसे कमजोर बग्स में से एक है जिसे मैंने कभी सामना किया है ... क्या पैकेज बनाए रखने वाले यह सुनिश्चित करने के लिए नहीं हैं कि इस तरह की चीजें नहीं होती हैं ?? –

+2

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

+3

मैं इससे थोड़ा उलझन में हूं, आप अंत में एनपीएम क्यों हटाते हैं? क्या अभी भी इसकी आवश्यकता नहीं है? –

4

मेरे मामले में ऐसा इसलिए था क्योंकि मेरे PATH पर्यावरण चर में, "~/progs/node/bin /" था और "~" को env द्वारा हल नहीं किया गया है ... इसे वास्तविक पूर्ण के साथ बदलना पथ ("/ home/myuser/node/bin") मेरी समस्या हल हो गई।

+0

बढ़िया! आपको यह कैसे मिला? –

+1

विभिन्न पागल चीजों के सभी प्रकार की कोशिश करके ... :) –

21

आप स्थापित करना चाहिए NodeJS-विरासत पैकेज है जो/usr/bin/नोड/usr/bin करने से एक लिंक है/NodeJS

$ sudo apt-get install nodejs-legacy

0

cmd

sudo apt-get install nodejs-legacy 
chmod your folder 700 (optional) 
1

इस में ऐसा समाधान

export PATH="$HOME/opt/nodejs/bin:$PATH" 

मेरे लिए इस समस्या का समाधान (यह $ संभालने काम करना चाहिए HOME चर ठीक से सेट है)। यह मुझे मेरी होम निर्देशिका के पथ को कड़ी कोडिंग से बचने की इजाजत देता है (उदाहरण के लिए, यदि मुझे आवश्यकता हो तो मैं अलग-अलग खातों/सर्वरों के साथ अपने .bash_profile का पुन: उपयोग कर सकता हूं)

संबंधित मुद्दे