Nodejs ไม่พบโมดูลที่ติดตั้งบน Windows


240

ฉันกำลังเรียนรู้ nodejs ในขณะนี้บน Windows หลายโมดูลถูกติดตั้งแบบโกลบอลพร้อม npm.cmd และ nodejs ไม่สามารถค้นหาโมดูลที่ติดตั้งได้ ยกตัวอย่างเช่น

npm install jade -g

Jade ถูกติดตั้งในไดเรกทอรี"C:\Program Files (x86)\nodejs\node_modules"แต่รหัสต่อไปนี้จะล้มเหลวโดยมี"Cannot find module 'jade'"ข้อผิดพลาด

var jade = require('jade');

อย่างไรก็ตามรหัสจะทำงานได้สำเร็จเมื่อติดตั้ง Jade ภายใน (โดยไม่ใช้ตัวเลือก -g ใน npm) ฉันไม่ต้องการใช้โมดูลที่ติดตั้งในเครื่องมันเสียพื้นที่ดิสก์สำหรับฉัน ฉันจะทำให้โมดูลที่ติดตั้งทั่วโลกทำงานบน Windows ได้อย่างไร



3
@AmolMKulkarni: ไม่แน่ใจว่ามันเกี่ยวข้องอย่างไรที่นี่ การเพิ่ม '.js' ลงในสิ่งที่ต้องการไม่สามารถแก้ไขปัญหาใน Windows ได้
Dan Dascalescu

1
@DanDascalescu: ฉันคิดว่าคุณเข้าใจผิดคำตอบ รหัสที่ให้ไว้ในคำตอบนั้นเป็นรหัสของ Node.js ซึ่งแสดงให้เห็นว่ามันค้นหาแพ็คเกจที่คุณต้องการได้อย่างไร ดังนั้นหากคุณเข้าใจตำแหน่งและรูปแบบของไฟล์คุณสามารถแก้ไขปัญหาของคุณได้ง่ายขึ้น
Amol M Kulkarni


ตามstackoverflow.com/questions/5817874/…การติดตั้ง npm ตลอดกาล -g
Sharif Yazdian

คำตอบ:


349

เพิ่มตัวแปรสภาพแวดล้อมที่เรียกว่าNODE_PATHและตั้งค่าเป็น%USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10) หรือที่ใดก็ตามที่ npm สิ้นสุดการติดตั้งโมดูลบนรสชาติ Windows ของคุณ หากต้องการดำเนินการให้เสร็จสิ้นให้เพิ่มสิ่งนี้เป็นตัวแปรระบบในแท็บขั้นสูงของกล่องโต้ตอบคุณสมบัติระบบ (เรียกใช้control.exe sysdm.cpl,System,3)

ทางออกที่รวดเร็วใน Windows 7+ คือการเรียกใช้:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

เป็นมูลค่าการกล่าวขวัญที่NODE_PATHใช้เฉพาะเมื่อนำเข้าโมดูลในแอพ Node เมื่อคุณต้องการใช้ไบนารีโมดูลที่ติดตั้งทั่วโลกใน CLI ของคุณคุณจะต้องเพิ่มไปยังของคุณPATHแต่ไม่มีnode_modulesส่วน (เช่น%AppData%\npmใน Windows 7/8/10)


เรื่องเก่า

ฉันค่อนข้างใหม่กับ node.js ตัวเองดังนั้นฉันจึงไม่ถูกต้องทั้งหมด แต่จากประสบการณ์ของฉันมันใช้งานได้ด้วยวิธีนี้:

  1. -gไม่ใช่วิธีในการติดตั้งไลบรารีทั่วโลกเป็นเพียงวิธีการวางไว้บนเส้นทางของระบบเพื่อให้คุณสามารถโทรจากบรรทัดรับคำสั่งโดยไม่ต้องเขียนเส้นทางแบบเต็มไปยังพวกเขา มันมีประโยชน์ตัวอย่างเช่นแอปโหนดกำลังแปลงไฟล์โลคัลอย่างน้อย - ถ้าคุณติดตั้งทั่วโลกคุณสามารถใช้มันในไดเรกทอรีใดก็ได้
  2. node.js เองไม่ได้ดู npm โกลบอล dir มันใช้อัลกอริทึมอื่นเพื่อค้นหาไฟล์ที่ต้องการ: http://nodejs.org/api/modules.html#modules_file_modules (โดยทั่วไปจะสแกนทุกโฟลเดอร์ในพา ธ เริ่มต้น จากปัจจุบันสำหรับโฟลเดอร์node_modulesและตรวจสอบ)

ดูคำถามที่คล้ายกันสำหรับรายละเอียดเพิ่มเติม: ฉันจะติดตั้งโมดูลทั่วโลกโดยใช้ npm ได้อย่างไร


17
ขอบคุณมากลิงค์ที่คุณให้มีประโยชน์มากตอนนี้ฉันชัดเจนมากขึ้นแม้ว่าอัลกอริทึมการค้นหาโมดูลจะดูซับซ้อนเล็กน้อย ในที่สุดฉันก็ใช้ตัวแปรสภาพแวดล้อม NODE_PATH เพื่ออ้างอิงพา ธ โมดูลโกลบอลset NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modulesและทำงานตามที่คาดไว้ เป็นเรื่องแปลกที่โมดูลที่ติดตั้งทั่วโลกอยู่ในตำแหน่ง '% USERPROFILE% \ Application Data \ npm \ node_modules' บน Windows ในขณะเดียวกันก็ไม่มีเครื่องหมายคำพูดใน NODE_PATH
Cosmore

2
ดีใจที่ได้ช่วยเหลือ ไม่ได้เปลี่ยน NODE_PATH พา ธ ไปยังโมดูล node.js เช่น FS หรือไม่
Alexey Ivanov

2
แม้ฉันสงสัยว่าทำไมC:\Program Files\nodejs\node_modules\npm\node_modulesไม่มีโมดูลที่ฉันเพิ่งติดตั้งโดยใช้npm install -g expressและมันมีอยู่ในC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske

1
ใน Windows 8 เส้นทางคือ%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar

9
หากคุณต้องการที่จะหาที่ไดเรกทอรี node_modules npm list -gทั่วโลกของคุณคือเรียกใช้คำสั่ง บรรทัดแรกของการส่งออกจะเป็นแม่ของ node_modules โลก directory-- ในคำอื่น ๆ ไดเรกทอรี node_modules {output}\node_modulesทั่วโลก นอกจากนี้ยังพิมพ์ไดเรกทอรีการติดตั้งออกมาเมื่อคุณเรียกใช้ด้วยnpm install --global {xyz}
cowlinator

34

หากคุณอยู่ในแพลตฟอร์ม windows7 คุณควรเปลี่ยน NODE_PATH ดังนี้: %AppData%\npm\node_modules


7
อยู่ในappdata \ roamingบน windows 8 เช่นกัน
JonnyRaa

6
ฉันใช้ windows 8.1 ที่มี npm 2.5.1 และฉันได้ตั้งค่า NODE_PATH เป็นเอกสารแล้ว แต่ยังหาแพ็คเกจที่ติดตั้งของฉันไม่พบ คิด?
JaKXz

5
ใน windows 10 มันควรจะเป็น% AppData% \ npm
อัศจรรย์

ในกรณีของฉัน (W10) มันเป็น% AppData% \ Roaming \ npm
Hinrich

32

ฉันรู้ว่าฉันสามารถปลุกซอมบี้ได้ แต่ฉันคิดว่านี่ยังคงเป็นปัญหาหากคุณต้องการเข้าใช้งานโหนดทั่วโลกในโมดูล Windows 7 คุณต้องเพิ่มสิ่งนี้ในเส้นทางตัวแปรทั่วโลกของคุณ:

C:\Users\{USER}\AppData\Roaming\npm

สำคัญ: มีเพียงส่วนนี้เท่านั้นที่ไม่มีnode_modulesส่วนฉันใช้เวลาครึ่งชั่วโมงในการดูสิ่งนี้


4
อีกทางเลือกหนึ่งสำหรับผู้ใช้ Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson

4
ขอบคุณสำหรับคำแนะนำในการนำชิ้นnode_modulesส่วนออกมาซึ่งกำลังดิ้นรนกับเรื่องนี้เช่นกัน!
danguilherme

20

สำหรับการทำให้มันทำงานบน windows 10 ฉันแก้ไขได้โดยการเพิ่มโฟลเดอร์%USERPROFILE%\AppData\Roaming\npmในเส้นทางของฉัน การ\node_modulesผนวกเช่นนี้%USERPROFILE%\AppData\Roaming\npm\node_modules\ไม่ได้ผลสำหรับฉัน


7
หรือมากกว่านั้นง่ายๆคือ `% AppData% \ npm`
Dan Diplo

ผู้ชายมันแปลกที่ใช้งานได้! ฉันกำลังตามล่าปัญหานี้มาสองวันแล้ว นี่เป็นทางออกที่คลุมเครือที่สุดที่ฉันได้ลองและวิธีแรกที่ใช้งานได้ ขอบคุณมาก.
จะ

ใช่เพียงแค่เพิ่มชุดรูปแบบของpathสภาพแวดล้อมจากนั้นเราสามารถเรียกใช้โดยตรงใน windows 10
Zhu Xiaohu

1
มันจะแสดงวิธีการทำสิ่งนี้จริง ๆ ด้วยตัวอย่างแทนที่จะพูดสิ่งต่าง ๆ เช่น "เพิ่งเพิ่ม ... "
Gabe Hiemstra

14

ฉันจะอ้างอิงจากโพสต์บล็อกของโหนดนี้...

โดยทั่วไปกฎของหัวแม่มือคือ:

  • หากคุณกำลังติดตั้งบางสิ่งที่คุณต้องการใช้ในโปรแกรมของคุณให้ใช้ require ('อะไรก็ตาม') จากนั้นติดตั้งในเครื่องที่รากของโครงการของคุณ
  • หากคุณกำลังติดตั้งบางสิ่งที่คุณต้องการใช้ในเชลล์ของคุณในบรรทัดคำสั่งหรือบางสิ่งให้ติดตั้งแบบโกลบอลเพื่อให้ไบนารีของมันสิ้นสุดลงในตัวแปรสภาพแวดล้อม PATH ของคุณ

...

แน่นอนว่ามีบางกรณีที่คุณต้องการทำทั้งสองอย่าง Coffee-script และ Express ทั้งคู่เป็นตัวอย่างที่ดีของแอพที่มีอินเตอร์เฟสบรรทัดคำสั่งรวมถึงห้องสมุด ในกรณีเหล่านั้นคุณสามารถเลือกทำอย่างใดอย่างหนึ่งต่อไปนี้:

  1. ติดตั้งในทั้งสองแห่ง อย่างจริงจังคุณมีพื้นที่ดิสก์สั้นหรือไม่ ไม่เป็นไรจริง ๆ พวกเขาเป็นโปรแกรมจาวาสคริปต์เล็ก ๆ
  2. ติดตั้งทั่วโลกจากนั้นเชื่อมโยง npm coffee-script หรือ npm link express (หากคุณอยู่บนแพลตฟอร์มที่รองรับลิงก์สัญลักษณ์) จากนั้นคุณจะต้องอัปเดตสำเนาทั่วโลกเพื่ออัพเดท symlink ทั้งหมดเช่นกัน

10
They’re tiny JavaScript programs.ห้องสมุดเหล่านี้บางแห่งไม่เล็กเลย!
UpTheCreek

1
@UpTheCreek ฉันมั่นใจว่าเขาอ้างถึงขนาดในขอบเขตของพื้นที่ดิสก์ พวกเขาเป็นไฟล์ข้อความ พวกมันเล็กอย่างเป็นกลาง
Phillip Copley

12

หากต้องการทำให้สั้นให้ใช้npm link jadeในไดเรกทอรีแอปของคุณ


4
ดูเหมือนว่าnpm link jadeไม่สามารถใช้งานบน Windows ได้ npm จะส่งคืนข้อความแสดงข้อผิดพลาดดังนี้:npm ERR! Error: npm link not supported on windows
Cosmore

1
ตอนนี้สำหรับเวอร์ชัน v0.8.9
Gianfranco P.

@beyonddoor: คุณต้องเรียกใช้npm linkจากหน้าต่างคำสั่งของผู้ดูแลระบบ
Mrchief

12

พยายามเพิ่ม / แก้ไขตัวแปรสภาพแวดล้อมและมาสรุปว่า:

  1. แก้ไข / เพิ่มUser variables(ของกล่องด้านบน) แทนSystem variables(จากส่วนล่าง); มิฉะนั้นคุณต้อง "เรียกใช้ในฐานะผู้ดูแลระบบ" เพื่อให้มันทำงานได้
  2. ผนวก;%AppData%\npmไปPathเพื่อที่จะใช้มันเป็นเครื่องมือบรรทัดคำสั่ง (ถ้าได้รับการสนับสนุนเช่นjshintและgrunt-cli)
  3. สร้างNODE_PATHและการตั้งค่า%AppData%\npm\node_modulesเพื่อrequire('<pkg_name>')ในสคริปต์โดยไม่ต้องติดตั้งไว้ในไดเรกทอรีโครงการ (แต่npm linkแนะนำสำหรับข้อกำหนดนี้หากคุณใช้งานระบบปฏิบัติการmklinkเช่น Vista และใหม่กว่า)

สภาพแวดล้อมการทดสอบ:

  • Win 7 (เอนต์, 64- บิต, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (เอนท์, 64- บิต), Node.js 0.10.30, npm 1.4.21

9

ฉันมีเวลาที่แย่มากในการทำให้โมดูลระดับโลกทำงาน ในที่สุดฉันเพิ่มอย่างชัดเจนC:\Users\yourusername\AppData\Roaming\npmในตัวแปร PATH ภายใต้ตัวแปรระบบ ฉันยังต้องการให้ตัวแปรนี้มาก่อนตัวแปร pathjs ในรายการ

ฉันใช้ Windows 10


นี่เป็นสิ่งเดียวที่ทำงานให้ฉัน ทำงานบน windows 8
charlie carver

1
นี่เป็นสิ่งเดียวที่ใช้ได้สำหรับฉันด้วยขอขอบคุณ!
devqon

6

ฉันพบปัญหานี้ใน Windows 7 ที่ทำงานอยู่

npm install -g gulp

ในฐานะผู้ดูแลระบบในขณะที่กำลังเข้าสู่ระบบในฐานะผู้ใช้ปกติ

การแก้ไข:เมื่อทำการติดตั้งเดียวกันกับผู้ใช้ปกติ (ไม่ใช่ "run as admin" สำหรับ cmd) ทั้งหมดนั้นใช้ได้ ฉันเดาว่ามันเกี่ยวข้องกับการติดตั้งและเส้นทางการค้นหาเริ่มต้น


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

Windows 8.1 pro พร้อมกับ nodejs v6.9.4 เพื่อตั้งค่าการเรียกใช้เส้นทาง: C: \ Program Files \ nodejs \ nodevars.bat
Robot70

4

จาก expierience ของฉันกับ win8.1 NPM การติดตั้งโมดูล C:\Users\[UserName]\AppData\Roaming\npm\node_modules แต่การค้นหา dumply C:\Users\[UserName]\node_modulesพวกเขาใน

โมดูลอ้างอิงโซลูชันที่เรียบง่ายหนึ่งโมดูลในแอ็พพลิเคชันโดยพา ธ เต็ม:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");

4

สำหรับ windows ทุกคนบอกว่าคุณควรตั้งค่าตัวแปรสภาพแวดล้อมสำหรับโมดูล nodejs และ npm แต่คุณรู้หรือไม่ว่าทำไม สำหรับบางโมดูลพวกเขามีเครื่องมือบรรทัดคำสั่งหลังจากติดตั้งโมดูลมีไฟล์[โมดูล] .cmdในC: \ Program Files \ nodejsและใช้สำหรับเรียกใช้ในคำสั่งหน้าต่าง ดังนั้นหากคุณไม่เพิ่มพา ธ ที่มีไฟล์ cmd ไปยังตัวแปรสภาพแวดล้อม% PATH%คุณจะไม่สามารถเปิดใช้งานได้สำเร็จผ่านหน้าต่างคำสั่ง


2

ฉันมีปัญหาเดียวกันพยายามติดตั้ง bower ด้วย npm install -g bower

ฉันคิดว่าเป็นเพราะโหนดถูกติดตั้งโดยผู้ใช้รายอื่นไม่ใช่ฉัน

ฉันถอนการติดตั้งโหนดแล้วติดตั้งใหม่ ระหว่างการติดตั้งฉันเห็นข้อความนี้สำหรับตัวเลือกAdd to PATH> npm modules :

ข้อความในการติดตั้งโหนด

ป้อนคำอธิบายรูปภาพที่นี่

หลังจากการติดตั้งโหนดฉันดำเนินการnpm install -g bowerอีกครั้ง และตอนนี้ทำงานได้ร่มรื่น

แน่นอนว่าไม่จำเป็นต้องติดตั้งโหนดใหม่กับผู้ใช้ของฉันเองเช่นฉัน โซลูชันจะต้องผ่านตัวแปรNODE_PATHหรือPATHตามที่ผู้ใช้รายอื่นได้อธิบายไว้

นี่เป็นเพียงการสังเกตว่าปัญหานี้เกิดขึ้นเฉพาะเมื่อมีการติดตั้งโหนดโดยผู้ใช้รายอื่น (หรือระหว่างการติดตั้งตัวเลือกเพิ่มไปยังเส้นทาง> โมดูล npmไม่ได้ถูกทำเครื่องหมาย)



1

หรือคุณสามารถเพิ่ม~/.npmrcสิทธิคำนำหน้า ฉันมีC:\Program Files\nodejs64 Win7


1

ฉันสะดุดกับคำถามนี้เพราะฉันต้องการใช้ node.js กับ visual studio 2015 บนคอมพิวเตอร์เครื่องใหม่ที่มี windows 10 ฉันใช้ node.js กับ windows 7 และ 8 และ 8.1 ไม่เคยมีปัญหา node.js หาโมดูล ฉันใช้โหนดรุ่นเก่า 0.10.39 เพราะฉันต้องใช้รุ่นนี้เนื่องจากโมดูลอนุกรมและ RFXCOM

คำตอบสำหรับ windows 10 คือการตั้งค่า NODE_PATH ในตัวแปรสภาพแวดล้อมด้วย C: \ Users \ User \ node_modules


1
เอ่อไม่ (Windows 10 ที่นี่ .. ) ฉันเห็นโมดูลบางตัวที่C:\Users\User\node_modules ฉันเห็นโมดูลบางตัวที่C:\Users\User\AppData\Roaming\npm\node_modules ฉันเห็นโมดูลบางส่วนที่C:\Users\User\node_modules ยังตั้งอยู่ที่C:\Program Files (x86)\nodejs\node_modules\npm\node_modules ไม่แน่ใจว่าสิ่งนี้เกิดขึ้นได้อย่างไร อันไหนและทำไมพวกเขาทำอย่างนั้น?
zipzit

1

สำหรับ Windows 10 ฉันต้องติดตั้งอึกไว้ในโฟลเดอร์:

C: \ Users \ myAccount \ AppData \ Roaming \ NPM \ node_modules

npm install gulp

แก้ไขปัญหาของฉัน "อึกไม่เป็นที่รู้จัก"


0

เพียงดาวน์โหลดและติดตั้งโหนดอีกครั้งจากนี้และนี่จะแก้ไขปัญหาของเส้นทางทั้งหมด

อย่าลืมรีสตาร์ทพรอมต์คำสั่งหรือเทอร์มินัลของคุณ


0

คำตอบทั้งหมดข้างต้นไม่ได้ผลสำหรับฉัน สิ่งเดียวที่ทำงานได้ในที่สุดคือการเพิ่ม% AppData% \ npm ให้กับตัวแปร Path ของสภาพแวดล้อมและเพื่อลบไฟล์สองไฟล์ใน C: \ Program Files \ nodejs

แพ็กเกจ ng ไม่ถูกติดตั้งใน C: \ Program Files \ nodejs \ node_modules ดังนั้นจึงเห็นได้ชัดว่าการใช้ไบนารี ng จากไดเรกทอรี nodejs จะไม่ทำงาน

ฉันไม่แน่ใจว่าทำไมมันค้นหาในไดเรกทอรีนี้เพราะฉันกำหนดค่าแล้ว - ตัวแปรสภาพแวดล้อมของเส้นทาง - .npmrc ใน C: \ Users \ MyUser - พยายามเพิ่มตัวแปรระบบและ / หรือ NODE_PATH


-4

ถ้าคุณใช้ windows มันต้องใช้บางขั้นตอน 1) สร้างไฟล์ชื่อ package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

โดยที่ hello เป็นชื่อของแพ็กเกจและ * หมายถึงเวอร์ชันล่าสุดของการพึ่งพาของคุณ

2) โค้ดให้กับโปรเจคของคุณและทำการรันคำสั่ง

ติดตั้ง NPM

มันติดตั้งการอ้างอิง


4
สิ่งนี้ไม่ได้ติดตั้งไว้ทั่วโลก (ซึ่งคำถามถาม) สิ่งนี้ดึงการพึ่งพาเข้าสู่แอป
bryanmac

ฉันได้ลองทุกอย่างที่กล่าวไว้ด้านบนเพื่อลองและชักชวนการติดตั้ง node.js ของฉันเพื่อรับรู้โมดูลที่ติดตั้งทั่วโลกและไม่มีการทำงาน แม้หลังจากถอนการติดตั้งและติดตั้งโหนดใหม่ (v8.11.3 LTS) ทุกครั้งที่ฉันพยายามออกคำสั่ง require ("mongodb") ในสคริปต์ node.js ฉันได้รับข้อผิดพลาด SAME: "ไม่พบโมดูล mongodb" แต่ถ้าฉันออกคำสั่ง "npm ll -g mongodb" NPM จะบอกฉันว่าโมดูลได้รับการติดตั้งแล้ว ใครบางคนได้โปรดมอบความอ่อนแอให้ฉันที่จะทำให้เกิดปัญหานี้ได้ไหม
เดวิดเอ็ดเวิร์ด

UPDATE: Saulius ด้านบนได้จัดเตรียมวิธีการแก้ปัญหาที่ใช้งานได้จริงคือการระบุเส้นทางแบบเต็มไปยังโมดูลใน JavaScript ต้องใช้คำสั่ง แต่ถ้าการสังเกตของเขาเกี่ยวกับการค้นหา node.js ในโฟลเดอร์ที่ไม่ถูกต้องสำหรับโมดูลที่ติดตั้งนั้นถูกต้องใครบางคนสามารถแจ้งเตือนผู้พัฒนา node.js เกี่ยวกับเรื่องนี้? เนื่องจากปัญหายังคงส่งผลกระทบต่อ v8.11.3 LTS
David Edwards
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.