ฉันจะติดตั้ง package.json dependencies ในไดเรกทอรีปัจจุบันโดยใช้ npm ได้อย่างไร


202

ฉันมี app เว็บ: fooapp ฉันมีpackage.jsonราก node_modules directoryฉันต้องการที่จะติดตั้งการอ้างอิงทั้งหมดที่อยู่ในที่เฉพาะเจาะจง ฉันจะทำสิ่งนี้ได้อย่างไร

สิ่งที่ฉันต้องการ

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

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

สิ่งที่ฉันได้รับ

เมื่อฉันวิ่งnpm install fooapp/ ฉันจะได้รับสิ่งนี้:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm สร้างสำเนาของไดเร็กทอรีแอพของฉันใน node_modules dir และติดตั้งแพ็กเกจภายในไดเร็กทอรี node_modules อื่น

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

คำตอบ:


389

วิ่ง:

npm install

จากภายในไดเรกทอรีของแอป (เช่นที่ package.json ตั้งอยู่) จะติดตั้งการอ้างอิงสำหรับแอปของคุณมากกว่าการติดตั้งเป็นโมดูลตามที่อธิบายไว้ที่นี่ สิ่งเหล่านี้จะถูกวางใน. / node_modules สัมพันธ์กับไฟล์ package.json ของคุณ (จริง ๆ แล้วมันซับซ้อนกว่านี้เล็กน้อยดังนั้นให้ตรวจสอบเอกสาร npm ที่นี่ )

คุณมีอิสระในการย้าย node_modules dir ไปยัง parent dir ของแอปของคุณหากคุณต้องการเนื่องจากกลไก 'ต้องการ' ของโหนดเข้าใจสิ่งนี้ อย่างไรก็ตามหากคุณต้องการอัปเดตการพึ่งพาแอปของคุณด้วยการติดตั้ง / อัปเดต npm จะไม่เห็นการย้าย 'node_modules' และจะสร้าง dir ใหม่แทนซึ่งสัมพันธ์กับ package.json

เพื่อป้องกันสิ่งนี้เพียงสร้าง symlink ไปยัง node_modules ที่ถูกย้ายจาก dir ของแอปของคุณ:

ln -s ../node_modules node_modules

Fantastic! ฉันจะลองและทำเครื่องหมายคำตอบนี้ว่ายอมรับถ้ามันใช้งานได้
Daniel Beardsley

9
แม้จะเป็นโซลูชันที่ใช้งานได้ แต่ฉันค้นพบว่าnpm linkสะดวกกว่าในสถานการณ์เช่นนี้ที่คุณต้องคว้าโมดูลจากไดเรกทอรีอื่น (ดูstackoverflow.com/a/14387210/820520 )
melekes

14

ในกรณีของฉันฉันต้องทำ

sudo npm install  

โครงการของฉันอยู่ใน / var / www ดังนั้นฉันจึงต้องตั้งค่าการอนุญาตที่เหมาะสม


15
sudo อาจไม่จำเป็นสำหรับการติดตั้ง npm
อัลเลนคู

2
ทั้งนี้ขึ้นอยู่กับการใช้งานที่ตอบสนองความต้องการที่จะดำเนินการ js sudo -u [username] npm installไฟล์และการอ้างอิงการติดตั้งคุณสามารถเรียกใช้ ดีกว่าที่จะเพียงแค่npm installและchownไดเรกทอรี node_modules ซ้ำหลังจากความจริง
TheLonelyGhost

5
ไม่เคยเรียกใช้ npm ด้วย sudo เว้นแต่คุณจะใช้-g- และแม้จะมีวิธีที่ดีกว่าในการจัดการกับมัน
tkone

1
ขอบคุณที่คุณตอบ แต่ทำไมถึงเป็นเช่นนั้น? คุณสามารถอธิบาย? ฉันหมายถึงถ้าฉันมีโครงการที่ฉันต้องการหรือจำเป็นต้องเก็บโฟลเดอร์ที่มีสิทธิ์การใช้งานรูทและติดตั้งการพึ่งพาโดยไม่ต้องมี -g? อาจมีเหตุผลที่ดี แต่ฉันติดตั้ง sudo npm (ไม่ใช้ -g) สองสามครั้งและไม่เคยมีปัญหาใด ๆ ไชโย!
aesede

1
@ RedCat ฉันเห็นด้วยกับวิธีที่ถูกต้องในการทำสิ่งนี้ แต่หลังจากนั้นฉันสังเกตเห็นว่าการสนทนานี้กำลังย้ายไปยัง Ubuntu ดูเหมือนว่ามีปัญหาในการจัดการสิทธิ์และโฟลเดอร์บางอย่างซึ่งบังคับให้ผู้ใช้ใช้sudo npm. อีกครั้งเฉพาะใน Ubuntu
aesede

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