ฉันจะติดตั้งโมดูลทั่วโลกโดยใช้ NPM ได้อย่างไร


202

ฉันเพิ่งติดตั้ง Node.js และโมดูล npm บน OSX และมีปัญหากับการตั้งค่าที่ฉันคิดว่า:

npm install [MODULE] is not installing the node.js module to the default path 
which is /usr/local/lib/node_modules.

คำตอบ:


347

หากคุณต้องการติดตั้งโมดูล npm แบบโกลบอลตรวจสอบให้แน่ใจว่าใช้-gแฟล็กใหม่ตัวอย่างเช่น:

npm install forever -g

คำแนะนำทั่วไปเกี่ยวกับการติดตั้งโมดูล npm ตั้งแต่ 1.0rc (นำมาจากblog.nodejs.org ):

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

ฉันเพิ่งใช้คำแนะนำนี้และมันก็ราบรื่นดี ฉันติดตั้งไว้ตลอดไปทั่วโลก (เนื่องจากเป็นเครื่องมือบรรทัดคำสั่ง) และโมดูลแอปพลิเคชันของฉันทั้งหมดในพื้นที่

อย่างไรก็ตามหากคุณต้องการใช้บางโมดูลทั่วโลก (เช่น express หรือ mongodb) ให้ใช้คำแนะนำนี้ (นำมาจากblog.nodejs.org ):

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

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

ตัวเลือกแรกนั้นดีที่สุดในความคิดของฉัน ง่ายชัดเจนชัดเจน ประการที่สองมีประโยชน์จริง ๆ ถ้าคุณกำลังจะใช้ไลบรารีเดียวกันในโครงการต่าง ๆ มากมาย (เพิ่มเติมเกี่ยวกับลิงก์ NPM ในงวดต่อ ๆ ไปในอนาคต)

ฉันไม่ได้ทดสอบหนึ่งในรูปแบบเหล่านั้น แต่พวกเขาดูเหมือนจะตรงไปตรงมา


7
ขอบคุณสำหรับคำชี้แจง Isaacs ควรแทนที่ manfile และ PMI git ทั้งหมดด้วยข้อความข้างต้น สามารถกำจัดความสับสนของมวลชนได้
Mauvis Ledford

shweeet สิ่งนี้มีประโยชน์ฉันถูกจับได้จากการเปลี่ยนแปลงนี้ ณ จุดหนึ่งการติดตั้ง npm ให้การเข้าถึงบรรทัดคำสั่งแล้วมันก็หายไปและฉันไม่ได้ติดตามโครงการอย่างใกล้ชิดพอที่จะรับช่วงการเปลี่ยนภาพ
Mark Essel

สิ่งนี้อธิบายว่าทำไมฉันจึงมีโหนดโมดูลท้ายสุดในไดเรกทอรี Apache config ของฉัน . .
เอียนฮันเตอร์

1
จากblog.node.js.org : โดยปกติแล้วไบนารีทั่วโลกจะถูกติดตั้งใน {prefix} / bin และโมดูลทั่วโลกได้รับการติดตั้งใน {prefix} / node_modules และโมดูลโลคัลอยู่ใน. / node_modules ไฟล์เรียกทำงานจะเข้าสู่ . คุณสามารถเรียกใช้npm prefixเพื่อรับส่วนนำหน้าท้องถิ่นและnode prefix -gดูคำนำหน้าส่วนกลาง :)
nacho4d

"หากคุณกำลังติดตั้งบางสิ่งที่คุณต้องการใช้ในโปรแกรมของคุณให้ใช้ require ('อะไรก็ตาม') จากนั้นติดตั้งในเครื่องที่รากของโครงการของคุณ" - ฉันคิดว่ามันไม่ใช่ความคิดที่ดีถ้าโมดูลมีการคอมไพล์ไบนารี: มันจะต้องมีการรวบรวมใหม่บน linux และ windows อย่างถูกต้อง ฉันคิดว่าโมดูลประเภทนี้ต้องถูกตั้งค่าโดยใช้สภาวะแวดล้อม NODE_PATH vriable ( nodejs.org/api/… )
Sneg

8

ใน Mac ฉันพบผลลัพธ์ที่มีข้อมูลที่ฉันกำลังมองหา:

$> npm install -g karma
...
...
> ws@0.4.25 install /usr/local/share/npm/lib/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)
...
$> ls /usr/local/share/npm/bin
karma nf

หลังจากเพิ่ม/usr/local/share/npm/binลงในexport PATHบรรทัดใน.bash_profileบันทึกและเข้าsourceใช้แล้วฉันสามารถเรียกใช้ได้

$> karma --help

ปกติ



2

ฉันมีปัญหาในการติดตั้ง Express บน Ubuntu:

หากมีเหตุผลบางคำสั่ง NPM จะหายไปคำสั่งทดสอบ NPM npm helpกับ หากไม่มีให้ทำตามขั้นตอนเหล่านี้ - http://arnolog.net/post/8424207595/installing-node-js-npm-express-mongoose-on-ubuntu

หากคำสั่ง Express ไม่ทำงานให้ลอง:

sudo npm install -g express

สิ่งนี้ทำให้ทุกอย่างทำงานได้เหมือนที่ฉันคุ้นเคยกับ Windows7 และ OSX

หวังว่านี่จะช่วยได้!



-1

ใน Ubuntu, เส้นทางการตั้งค่าของ node_modules ใน.bashrcไฟล์

ส่งออก PATH = "/ home / ชื่อผู้ใช้ / node_modules / .bin: $ PATH"


-5

คุณอาจไม่มีสิทธิ์ในการเขียนเพื่อติดตั้งโมดูลโหนดในตำแหน่งโกลบอลเช่น/usr/local/lib/node_modulesในกรณีนี้ให้รันแพ็กเกจ npm install -g เป็นรูท

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