एनपीएम वैश्विक स्थापित "मॉड्यूल नहीं मिल सकता है"


206

मैंने एक मॉड्यूल लिखा था जिसे मैंने npm पर एक पल पहले प्रकाशित किया था (https://npmjs.org/package/wisp)

तो यह कमांड लाइन से ठीक इंस्टॉल होता है:

$ npm i -g wisp

हालाँकि, जब मैं इसे कमांड लाइन से चलाता हूं, मुझे एक त्रुटि मिलती रहती है कि आशावादी स्थापित नहीं है:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

हालाँकि, मैंने एक निर्भरता के रूप में package.json में निर्दिष्ट किया है:

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

क्या किसी को पता है कि इसे चलाने के लिए क्या करना है? मुझे पता है कि बिन के साथ करने के लिए निष्पादन योग्य बिन और नोड_modules जोड़ने के साथ उस निर्देशिका में खाली किया जा रहा है। इसे हल करने के लिए कोई विचार नहीं है।


यदि आप -g विकल्प के बिना स्थापित करते हैं तो क्या होगा?
विनयार

यह मौजूदा डायरेक्टरी में एक नोड_मॉडल फ़ोल्डर स्थापित करता है जिसके अंदर बुद्धिमानी है।
मेनट्रूचुअल

मुझे पता है। क्या आपको अभी भी त्रुटि मिलती है?
विनयार

हां। अगर मैं एक स्थानीय npm i
वारपीस करने के बाद समझदारी

मैंने अभी आपका मॉड्यूल स्थापित किया है। यह मेरे लिए ठीक काम कर रहा है। आपका बुद्धिमान कहाँ है? मेरे मामले में मैं भाग गया ./node_modules/wisp/wispजो ठीक काम करता है।
विनयार

जवाबों:


370

किसी और को इसमें भाग लेने के लिए, मुझे अपने npmस्थान पर स्थापित करने के कारण यह समस्या थी जो मेरे ऊपर नहीं है NODE_PATH

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

मेरा NODE_PATH खाली था, और चलाने से npm install --global --verbose promised-ioपता चला कि यह इसमें स्थापित था /opt/lib/node_modules/promised-io:

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

मेरी स्क्रिप्ट विफल रहती है require('promised-io/promise'):

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

मैंने संभवतः स्रोत का उपयोग करके नोड और एनपीएम स्थापित किया है configure --prefix=/opt। मुझे नहीं पता कि इसने उन्हें स्थापित मॉड्यूल खोजने में असमर्थ बना दिया है। अभी के लिए फिक्स सही निर्देशिका पर NODE_PATH इंगित करना है:

export NODE_PATH=/opt/lib/node_modules

मेरा require('promised-io/promise')अब सफल हो गया।


10
यह NODE_PATH कहाँ सेट करें ??
सैंडी

8
@sandy जहाँ आप NODE_PATH परिवेश चर सेट करते हैं, आपके ऑपरेटिंग सिस्टम पर निर्भर करता है। मैं लिनक्स के स्वाद का उपयोग कर रहा हूं, इसलिए मैंने export NODE_PATH=...इसे स्थानीय शेल में सेट करने के लिए उपयोग किया जैसे कि यह उस शेल में चलने वाले कमांड को निर्यात किया जाता है। परिवर्तन को लगातार या सभी गोले के लिए उपलब्ध करने के लिए, इसे .profile या समान में डालें। एक पूरे के रूप में अवधारणा नौसिखिया के लिए कष्टप्रद रूप से जटिल है, help.ubuntu.com/community/EnvironmentVariables को पढ़ने का प्रयास करें । विंडोज के लिए, आप लिनक्स पर स्विच करना चाहेंगे। ठीक है, बस मजाक कर रहे हैं। प्रयास करें computerhope.com/issues/ch000549.htm या यह गूगल।
नीक

13
OSX शेर के लिए, निम्नलिखित ने मेरे लिए काम किया ... सही रास्ते को ट्रैक करने के लिए NODE_PATH = / usr / local / lib / node_modules का उपयोग किया, जिसका मैंने 'पता लगाएँ_modules' का उपयोग किया।
k1eran

2
NODE_PATH विन्डोज़ के लिए भी काम करता है। यह नोड मॉड्यूल में निहित है स्थानीय और विश्व स्तर पर दोनों को स्थापित किया जा सकता है।
20'14

5
यदि आपने मैक ओएस एक्स पर होमब्रेव के साथ Node.js स्थापित किया है: open -a TextEdit ~/.bash_profileटर्मिनल में चलाएं , तो export NODE_PATH=/usr/local/lib/node_modulesफ़ाइल के अंत में जोड़ें । टर्मिनल विंडो को पुनरारंभ करें। अब रनिंग echo $NODE_PATHका प्रिंट आउट लेना चाहिए /usr/local/lib/node_modules
Pwdr

39

इसे प्रोग की शुरुआत में जोड़ें (mac):

module.paths.push('/usr/local/lib/node_modules');


4
गैर-ओएस विशिष्ट तरीके से करने का कोई तरीका?
उपनिषद

@UpTheCreek इस है एक गैर ओएस विशिष्ट तरीके से। यह जेएस कोड है, आपको बस एक नोड_मॉड्यूल्स को इंगित करना होगा जिसमें मॉड्यूलयु की तलाश है
एडेलिन

@ एडेलिन - यह एक ओएस विशिष्ट समाधान है क्योंकि वैश्विक नोड_मॉड्यूल का स्थान ओएस विशिष्ट है। जैसे अगर आप खिड़कियों पर विकास कर रहे हैं, और उत्पादन में लिनक्स चला रहे हैं, तो यह एक महान समाधान नहीं है।
उपराष्ट्रपति

वह आसानी से दूर हो गया। उदाहरण के लिए, आप env चर में नोड पथ को बचा सकते हैं, उदाहरण के लिए, और हार्डकोड किए गए पथ को os.environ.nodepathइन पंक्तियों के साथ (कुछ के साथ) बदलें ।
एडेलिन

macOS Mojave 10.14.6 को एक्सपोर्ट NODE_PATH = / usr / local / lib / node_modules / npm / node_modules को ~ / bash_profile में जोड़ने की आवश्यकता होती है, जो कि देशी .js कोड से अधिक मशीन स्वतंत्र है अप्रभावित है।
vwvan

16

डिफ़ॉल्ट नोड द्वारा वैश्विक मॉड्यूल लोड करने के लिए / usr / स्थानीय / lib / node_module के अंदर नहीं दिखता है। Http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders में समझाया गया लोडिंग मॉड्यूल देखें

तो या तो आपको 1) NODE_PATH में / usr / लोकल / lib / नोड_मॉडल जोड़ें और इसे एक्सपोर्ट करें या 2) इंस्टॉल किए गए नोड मॉड्यूल को / usr / लोकल / लीब / नोड में कॉपी करें। (लोडिंग मॉड्यूल नोड के लिए लिंक में बताया गया है कि इस रास्ते में खोज करेंगे और काम करेंगे)


10

कुछ के लिए (मेरे जैसे) कि कुछ और काम नहीं किया, यह कोशिश करें:

brew cleanup
brew link node
brew uninstall node
brew install node

आशा है कि यह किसी की मदद करता है :)


9

निम्नलिखित सामान्य फिक्स किसी भी मॉड्यूल के लिए होगा। उदाहरण के लिए request-promise

बदलने के

npm install request-promise --global

साथ में

npm install request-promise --cli

काम किया ( स्रोत ) और भी globalsऔर के लिएinherits

इसके अलावा, पर्यावरण चर सेट करने का प्रयास करें

NODE_PATH=%AppData%\npm\node_modules

8

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

https://github.com/mbloch/mapshaper/issues/12


3

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"

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

2

विंडोज के लिए, Nodejs से विंडोज पर स्थापित मॉड्यूल नहीं मिल सकता है? क्या मेरे लिए काम npm लिंक के रूप में चल रहा है

npm link wisp

यद्यपि सावधानी का एक शब्द - मैंने ऐसा किया था, लेकिन तब AWS लांबा के साथ अपने ज़िपित कोड का उपयोग नहीं कर सका। मुझे स्थानीय रूप से npm install wisp --save( -जी विकल्प के बिना) में नोड_मॉडल बनाया जाना था
पीएम

2

मैक उपयोगकर्ता के लिए यह मैनुअल इंस्टालेशन का सबसे अच्छा उपयोग है:

अनुमतियों की त्रुटियों की संभावना को कम करने के लिए, आप एक अलग निर्देशिका का उपयोग करने के लिए npm कॉन्फ़िगर कर सकते हैं। इस उदाहरण में, यह आपके होम फ़ोल्डर पर एक छिपी हुई निर्देशिका होगी।

  1. अपना कंप्यूटर शुरू करने से पहले बैक-अप करें।

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

    mkdir ~ / .npm-global

  3. नई निर्देशिका पथ का उपयोग करने के लिए npm कॉन्फ़िगर करें:

    npm विन्यास सेट उपसर्ग '~ / .npm-global'

  4. एक ~ / .profile फ़ाइल खोलें या बनाएं और इस पंक्ति को जोड़ें:

    PATH = ~ / .npm-global / bin: $ PATH निर्यात करें

  5. कमांड लाइन पर वापस, अपने सिस्टम चर को अपडेट करें:

    source ~ / .प्रोफाइल

  6. टेस्ट: सुडो का उपयोग किए बिना विश्व स्तर पर एक पैकेज डाउनलोड करें।

    npm स्थापित -g jshint

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

NPM_CONFIG_PREFIX=~/.npm-global

संदर्भ: https://docs.npmjs.com/getting-started/fixing-npm-permissions


1

के Ubuntuतहत चल रहे एक परीक्षण सर्वर पर एक ही समस्या थी root। तब का उपयोग कर एक नया प्रयोक्ता बनाया useradd -m myuserऔर स्थापित सब कुछ ( nvm, node, संकुल) के रूप में myuser। अब यह ठीक काम कर रहा है।


1

खिड़कियों पर अगर आपने अभी-अभी एक क्लीन इंस्टाल किया और आपको यह मिलता है तो आपको अपने npm कैश को \ AppData \ Roaming में उड़ाने की जरूरत है


1

मेरे मामले में दोनों nodeऔर npmएक ही रास्ते में थे ( /usr/bin)। NODE_PATHखाली था, इसलिए npmमें वैश्विक मॉड्यूल रखा /usr/lib/node_modulesजहां require(...)उन्हें सफलतापूर्वक पाते हैं। एकमात्र अपवाद npmमॉड्यूल था , जो नोडज पैकेज के साथ आया था। चूंकि मैं 64 बिट सिस्टम का उपयोग कर रहा हूं, इसलिए इसे रखा गया था /usr/lib64/node_modules। यह वह जगह नहीं है, जहां से (और) खाली NODE_PATHऔर नोड शुरू होने की स्थिति में खोज की जाती है /usr/bin। इसलिए मेरे पास दो विकल्प थे:

  • से लिंक /usr/lib64/node_modules/npmकरें/usr/lib/node_modules/npm
  • मॉड्यूल /usr/lib/node_modules/*को /usr/lib64/node_modules/सेट और सेट करेंNODE_PATH=/usr/lib64/node_modules

दोनों ने काम किया। मैं OpenSUSE 42.1 का उपयोग कर रहा हूं और अद्यतन रिपॉजिटरी से नोडज पैकेज। संस्करण 4.4.5 है।


1

मैंने इसे सरल तरीके से किया ...

  1. कंट्रोल पैनल [विंडोज 7] से नोड स्थापित करें
  2. फिर से नोड स्थापित करें
  3. प्रोट्रेक्टर npm install --global --verbose protractor
    अपडेट वेब ड्राइवर प्रबंधक स्थापित करें ।

मेरे लिए ठीक काम करता है।

आशा है कि यह आपकी मदद करेगा…।


1

मुझे यह त्रुटि मिली Error: Cannot find module 'number-is-nan'जबकि मॉड्यूल वास्तव में मौजूद है। यह खराब / अपूर्ण Node.js इंस्टॉलेशन के कारण था।

विंडोज के लिए, जैसा कि अन्य उत्तर बताते हैं, आपको एक साफ नोड इंस्टॉलेशन की आवश्यकता है :

  • Node.js की स्थापना रद्द करें
  • फोल्डर मिटा दें npmऔर npm_cacheमेंC:\Users\user\AppData\Roaming
  • Windows को पुनरारंभ करें और Node.js स्थापित करें
  • भागो npm initया ( npm init --yesके लिए डिफ़ॉल्ट config )
  • के लिए Windows वातावरण चर सेट करें NODE_PATH। यह पथ वह स्थान है जहाँ आपके पैकेज स्थापित हैं। यह शायद कुछ ऐसा हैNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • एक नया cmd कंसोल प्रारंभ करें और npmठीक काम करना चाहिए

ध्यान दें :

Node.js को पुन: स्थापित करने से पहले अंतिम बिंदु आज़माएं, यह आपको कुछ समय बचा सकता है और आपके सभी पैकेजों को फिर से स्थापित करने से बच सकता है।


1

मैंने axiosमॉड्यूल की इस समस्या को पूरा किया है। फिर मैंने यह कोशिश की: रन rm -rf node_modulesऔर yarn। और यह काम करता है।


0

मुझे ओपी के रूप में एक ही त्रुटि थी, लेकिन लॉग के माध्यम से खुदाई मैं देख सकता था sh: node: command not found

यह पता चला है कि / usr / बिन / नोड प्रोग्राम (सिमलिंक) अब स्थापित नहीं है apt install nodejs। एक बार सीएमआई /usr/bin/node' toनोडजम् ,एनपीएम स्थापित -g @ कोणीय / cli` सफल हो गया।

डेबियन पर इसे स्थापित करने का उचित तरीका है apt install nodejs-legacy


0

मुझे अपने env चरों में C: \ Users \ {Username} \ AppData \ Roaming \ n जोड़ना था और तब मैं सामान स्थापित कर सकता था।

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