การติดตั้งทั่วโลกของ NPM“ ไม่พบโมดูล”


206

ฉันเขียนโมดูลที่ฉันเผยแพร่ไปยังนาทีที่แล้ว (https://npmjs.org/package/wisp)

ดังนั้นจึงติดตั้งได้ดีจากบรรทัดคำสั่ง:

$ npm i -g wisp

อย่างไรก็ตามเมื่อฉันเรียกใช้จากบรรทัดคำสั่งฉันได้รับข้อผิดพลาดที่ไม่ได้ติดตั้ง optimist:

$ 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"
  }
}

ไม่มีใครรู้ว่าสิ่งที่ต้องทำเพื่อให้ได้ทำงานนี้หรือไม่? ฉันรู้ว่ามันจะทำอย่างไรกับส่วนถังขยะที่เพิ่มการปฏิบัติการเพื่อ bin และ node_modules ในไดเรกทอรีนั้นว่างเปล่า ไม่ทราบวิธีแก้ไขปัญหานี้


จะเกิดอะไรขึ้นหากคุณติดตั้งโดยไม่มีตัวเลือก -g
vinayr

มันติดตั้งโฟลเดอร์ node_modules ในไดเร็กทอรีปัจจุบันซึ่งมีกำมืออยู่ภายใน
Menztrual

ฉันรู้ว่า. คุณยังได้รับข้อผิดพลาดหรือไม่?
vinayr

อ๋อ ถ้าฉันพยายามเรียกใช้กำมือหลังจากทำ npm ท้องถิ่นฉันกำมือยังคงส่งคืนข้อผิดพลาดเดียวกัน
Menztrual

ฉันเพิ่งติดตั้งโมดูลของคุณ มันทำงานได้ดีสำหรับฉัน กำมือของคุณอยู่ที่ไหน ในกรณีของฉันฉันวิ่ง./node_modules/wisp/wispซึ่งทำงานได้ดี
vinayr

คำตอบ:


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)

ฉันอาจติดตั้งโหนดและ NPM configure --prefix=/optจากแหล่งที่ใช้ ฉันไม่รู้ว่าทำไมสิ่งนี้ทำให้พวกเขาไม่สามารถหาโมดูลที่ติดตั้งได้ การแก้ไขในตอนนี้คือการชี้ NODE_PATH ไปที่ไดเรกทอรีด้านขวา:

export NODE_PATH=/opt/lib/node_modules

require('promised-io/promise')ตอนนี้ฉันประสบความสำเร็จ


10
จะตั้ง NODE_PATH นี้ได้ที่ไหน?
ทราย

8
@Sandy ที่คุณตั้งค่าตัวแปรสภาพแวดล้อม NODE_PATH ขึ้นอยู่กับระบบปฏิบัติการของคุณ ฉันกำลังใช้รสชาติของ Linux ดังนั้นฉันจึงexport NODE_PATH=...ตั้งค่าไว้ในเชลล์ภายในเพื่อส่งออกไปยังคำสั่งที่ทำงานในเชลล์นั้น ในการทำให้การเปลี่ยนแปลงมีอยู่หรือพร้อมใช้งานสำหรับเชลล์ทั้งหมดให้วางไว้ใน. profile หรือคล้ายกัน แนวคิดเป็นทั้งเป็นน่ารำคาญที่ซับซ้อนในการสมัครให้ลองอ่านhelp.ubuntu.com/community/EnvironmentVariables สำหรับ Windows คุณจะต้องเปลี่ยนเป็น Linux ตกลงแค่ล้อเล่น ลองใช้computerhope.com/issues/ch000549.htmหรือ google it
Neek

13
สำหรับ OSX Lion การทำงานต่อไปนี้สำหรับฉัน ... ส่งออก NODE_PATH = / usr / local / lib / node_modules ฉันใช้ 'ค้นหา node_modules' เพื่อติดตามเส้นทางที่ถูกต้อง
k1eran

2
NODE_PATH ใช้งานได้กับ WINDOWS เช่นกัน สิ่งนี้ถูกรูทในโมดูลโหนดสามารถติดตั้งได้ทั้งแบบโลคัลและแบบโกลบอล
zinking

5
หากคุณติดตั้ง Node.js ด้วย Homebrew บน Mac OS X: เรียกใช้open -a TextEdit ~/.bash_profileในเทอร์มินัลให้เพิ่มexport NODE_PATH=/usr/local/lib/node_modulesไปที่ท้ายไฟล์ รีสตาร์ทหน้าต่างเทอร์มินัล ตอนนี้ทำงานควรจะพิมพ์ออกมาecho $NODE_PATH /usr/local/lib/node_modules
Pwdr

39

เพิ่มสิ่งนี้ไปยังจุดเริ่มต้นของ prog (mac):

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


4
มีวิธีใดที่จะทำเช่นนั้นในแบบที่ไม่ใช่ระบบปฏิบัติการ?
UpTheCreek

@UpTheCreek นี่เป็นวิธีที่ไม่เฉพาะเจาะจง มันเป็นรหัส JS คุณเพียงแค่ต้องชี้ไปที่ node_modules ที่มี moduleyou กำลังมองหา
Adelin

@Adelin - เป็นโซลูชันเฉพาะสำหรับ OS เนื่องจากตำแหน่งของ node_modules ทั่วโลกเป็นระบบปฏิบัติการเฉพาะ เช่นถ้าคุณกำลังพัฒนาบน windows และใช้ linux ในการผลิตนี่ไม่ใช่ทางออกที่ดี
UpTheCreek

ที่เอาชนะได้ง่าย ตัวอย่างเช่นคุณสามารถบันทึกเส้นทางของโหนดในตัวแปร env ตัวอย่างเช่นและแทนที่เส้นทางฮาร์ดโค้ดด้วยos.environ.nodepath(บางสิ่งบางอย่างตามเส้นเหล่านี้)
Adelin

macOS Mojave 10.14.6 ต้องเพิ่มการส่งออก NODE_PATH = / usr / local / lib / node_modules / npm / node_modules ไปที่ ~ / bash_profile ซึ่งเป็นเครื่องที่เป็นอิสระมากขึ้นในการที่รหัสพื้นเมือง. js ไม่ได้รับผลกระทบ
vwvan

16

โดยโหนดเริ่มต้นจะไม่ดูใน / usr / local / lib / node_module สำหรับการโหลดโมดูลทั่วโลก อ้างถึงการโหลดโมดูลที่อธิบายในhttp://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

ดังนั้นคุณต้อง 1) เพิ่ม / usr / local / lib / node_module ไปที่ NODE_PATH และส่งออกหรือ 2) คัดลอกโมดูลโหนดที่ติดตั้งไปยัง / usr / local / lib / node (ตามที่อธิบายในลิงก์สำหรับโหลดโมดูลโหนดจะค้นหาในเส้นทางนี้และจะใช้งานได้)


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


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

สำหรับ Windows จากNodejs ไม่สามารถหาโมดูลที่ติดตั้งบน Windows ได้? สิ่งที่ใช้ได้ผลสำหรับฉันกำลังเรียกใช้ลิงก์ npm เหมือนใน

npm link wisp

แม้ว่าคำเตือน - ฉันทำสิ่งนี้ แต่ไม่สามารถใช้รหัสไปรษณีย์ของฉันกับแลมบ์ดา AWS ได้ ฉันต้องให้ node_module ถูกสร้างแบบโลคัลเหมือนในnpm install wisp --save(โดยไม่มีอ็อพชัน -g)
PM

2

สำหรับผู้ใช้ Mac ควรใช้การติดตั้งด้วยตนเอง:

เพื่อลดโอกาสของข้อผิดพลาดในการอนุญาตคุณสามารถกำหนดค่า npm ให้ใช้ไดเรกทอรีอื่น ในตัวอย่างนี้มันจะเป็นไดเรกทอรีที่ซ่อนอยู่ในโฟลเดอร์บ้านของคุณ

  1. สำรองข้อมูลคอมพิวเตอร์ของคุณก่อนที่จะเริ่ม

  2. สร้างไดเรกทอรีสำหรับการติดตั้งทั่วโลก:

    mkdir ~ / .npm-global

  3. กำหนดค่า npm เพื่อใช้เส้นทางไดเรกทอรีใหม่:

    คำนำหน้ากำหนดค่าการกำหนดค่า npm '~ / .npm-global'

  4. เปิดหรือสร้างไฟล์ ~ / .profile และเพิ่มบรรทัดนี้:

    ส่งออก PATH = ~ / .npm-global / bin: $ PATH

  5. กลับไปที่บรรทัดรับคำสั่งอัพเดตตัวแปรระบบของคุณ:

    แหล่งที่มา ~ / .profile

  6. ทดสอบ: ดาวน์โหลดแพ็คเกจทั่วโลกโดยไม่ต้องใช้ sudo

    npm install -g jshint

แทนที่จะทำตามขั้นตอนที่ 2-4 คุณสามารถใช้ตัวแปร ENV ที่สอดคล้องกัน (เช่นหากคุณไม่ต้องการแก้ไข ~ / .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

บน windows หากคุณเพิ่งทำการติดตั้งใหม่ทั้งหมดและคุณได้รับสิ่งนี้คุณต้องใช้แคช npm ใน \ AppData \ Roaming


1

ในกรณีของฉันทั้งสองnodeและnpmอยู่ในเส้นทางเดียวกัน ( /usr/bin) The NODE_PATHว่างเปล่าดังนั้นการnpmวางโมดูลโกลบอลลงใน/usr/lib/node_modulesตำแหน่งที่require(...)ค้นหาได้สำเร็จ ข้อยกเว้นเดียวคือnpmโมดูลซึ่งมาพร้อมกับแพ็คเกจ nodejs ตั้งแต่ฉันใช้ระบบ 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 และแพ็คเกจ nodejs จากที่เก็บข้อมูลอัปเดต เวอร์ชันคือ 4.4.5


1

ฉันทำสิ่งนี้ในวิธีที่ง่าย ...

  1. ยกเลิกการติดตั้งโหนดจากแผงควบคุม [Windows 7]
  2. ติดตั้งโหนดอีกครั้ง
  3. ติดตั้งตัวจัดการโปรแทรกเตอร์ของnpm install --global --verbose protractor
    เว็บโปรแทรกเตอร์

ทำงานได้ดีสำหรับฉัน

หวังว่านี่จะช่วยคุณได้ ....


1

ฉันได้รับข้อผิดพลาดนี้Error: Cannot find module 'number-is-nan'ในขณะที่โมดูลมีอยู่จริง มันเกิดจากการติดตั้ง Node.js ที่ไม่ดี / ไม่สมบูรณ์

สำหรับ Windows เป็นคำตอบอื่น ๆ ขอแนะนำว่าคุณต้องทำความสะอาดติดตั้งโหนด :

  • ถอนการติดตั้ง Node.js
  • ลบทั้งสองโฟลเดอร์npmและnpm_cacheในC:\Users\user\AppData\Roaming
  • รีสตาร์ท Windows และติดตั้ง Node.js
  • เรียกใช้npm initหรือ ( npm init --yesสำหรับการกำหนดค่าเริ่มต้น )
  • ตั้งค่าตัวแปรสภาพแวดล้อมของ 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

ผมมีข้อผิดพลาดเช่นเดียวกับ OP sh: node: command not foundแต่ขุดผ่านบันทึกฉันจะได้เห็น

แต่กลับกลายเป็นว่า / usr / bin / โหนดโปรแกรม (symlink) apt install nodejsมีการติดตั้งไม่มีอีกต่อไปกับ เมื่อ/usr/bin/node' toทำการเชื่อมโยง nodejs ,npm install -g @ angular / cli` สำเร็จ

apt install nodejs-legacyวิธีการที่เหมาะสมในการติดตั้งนี้ในเดเบียนคือ


0

ฉันต้องเพิ่ม C: \ Users \ {ชื่อผู้ใช้} \ AppData \ Roaming \ npm ไปยังตัวแปร env ของฉันแล้วฉันจะติดตั้งสิ่งของได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.