วิธีการติดตั้ง NPM ไปยังไดเรกทอรีที่ระบุ?


คำตอบ:


325

คุณสามารถใช้--prefixตัวเลือก:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

แพคเกจ (s) ./install/here/node_modulesจากนั้นจะได้รับการติดตั้งใน mkdirเป็นสิ่งจำเป็นตั้งแต่ NPM อื่นอาจจะเลือกที่มีอยู่แล้วnode_modulesไดเรกทอรีที่สูงขึ้นในลำดับชั้น (ดูเอกสาร npm ในโฟลเดอร์ )


65
ดูเหมือนว่าคุณต้องมีไฟล์ package.json ในไดเรกทอรีสำรองนี้หากคุณใช้ตัวเลือก --prefix มีวิธีที่จะมี package.json ในไดเรกทอรีปัจจุบันและติดตั้งไปยังไดเรกทอรีอื่นหรือไม่

2
@ เศษส่วนดูคำตอบของฉันสำหรับเรื่องนั้น
yunzen

10
@coundy มีวิธีระบุพา ธ สำหรับnpm install(โดยไม่มีชื่อแพ็คเกจ) หรือไม่? ฉัน thired นี้โดยตรง แต่แล้วลักษณะ NPM สำหรับในpackage.json {prefix}สิ่งที่ฉันยังมีจุดมุ่งหมายคือเพื่อให้สามารถที่จะให้ในรากโครงการและในเวลาเดียวกันการติดตั้งแพคเกจทั้งหมดในpackages.json {project root}/{project webroot}
automatix

ฉันพบปัญหาการเรียกซ้ำ มีวิธีบอกให้ทำงานครั้งเดียวหรือไม่? ฉันแก้ไขมันชั่วคราวด้วยการเปลี่ยนไดเรกทอรีแล้วโทรnpm installแต่--prefixดูเหมือนโซลูชันที่ดีกว่าถ้ามันไม่ทำให้เกิดการสอบถามซ้ำ
adi518

47

ในเอกสารประกอบมีการระบุไว้: ใช้ตัวเลือกคำนำหน้าพร้อมกับตัวเลือกสากล :

คำนำหน้าการตั้งค่าเริ่มต้นที่ตำแหน่งที่มีการติดตั้งโหนด ในระบบส่วนใหญ่นี้เป็น/ usr / local บน windows นี่เป็นตำแหน่งที่แน่นอนของไบนารี node.exe บนระบบ UNIX ก็ขึ้นหนึ่งระดับตั้งแต่โหนดโดยทั่วไปจะมีการติดตั้งที่{} คำนำหน้า / bin / โหนดมากกว่า {} คำนำหน้า /node.exe

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

(เน้นโดยพวกเขา)

ดังนั้นในรูทไดเร็กทอรีของคุณคุณสามารถติดตั้งได้

npm install --prefix <path/to/prefix_folder> -g

และมันจะติดตั้งnode_modulesโฟลเดอร์ลงในโฟลเดอร์

<path/to/prefix_folder>/lib/node_modules

2
คุณไม่สามารถrequireติดตั้งแพ็คเกจทั่วโลกได้ใช่ไหม
Pavlo

3
@Pavlo สิ่งนี้ช่วยได้ไหม? stackoverflow.com/questions/15636367/…
yunzen

1
คุณควรเพิ่มสิ่งนี้ในคำตอบ
Pavlo

6
@ Pavlo ฉันไม่คิดอย่างนั้น มันไม่ใช่คำตอบของ OP
yunzen

@Pavlo หากมีการติดตั้งแพคเกจทั่วโลกคุณจำเป็นต้องใช้มันในลักษณะเดียวกันเช่นเคย ใช่คุณสามารถใช้แพ็คเกจที่ติดตั้งทั่วโลกได้
Rob Evans

43

ตั้งแต่ npm เวอร์ชั่น 3.8.6 คุณสามารถใช้ได้

npm install --prefix ./install/here <package>

เพื่อติดตั้งในไดเรกทอรีที่ระบุ NPM จะสร้างnode_modulesโฟลเดอร์โดยอัตโนมัติแม้ว่าจะมีnode_modulesไดเรกทอรีอยู่แล้วในลำดับชั้นที่สูงขึ้น คุณยังสามารถมีpackage.jsonในไดเรกทอรีปัจจุบันแล้วติดตั้งในไดเรกทอรีที่ระบุโดยใช้--prefixตัวเลือก:

npm install --prefix ./install/here

ตั้งแต่ npm 6.0.0 คุณสามารถใช้ได้

npm install --prefix ./install/here ./

เพื่อติดตั้ง package.json ในไดเรกทอรีปัจจุบันไปยังไดเรกทอรี "./install/here" มีสิ่งหนึ่งที่ฉันสังเกตเห็นบน Mac ว่ามันสร้าง symlink ไปยังโฟลเดอร์แม่ภายในไดเรกทอรี node_modules แต่ก็ยังใช้งานได้

หมายเหตุ: NPM ให้เกียรติเส้นทางที่คุณระบุผ่าน--prefixตัวเลือก จะแก้ไขตามเอกสารต่อแกลลอนต่อนาทีในโฟลเดอร์เฉพาะเมื่อnpm installมีการใช้งานโดยไม่มี--prefixตัวเลือก


1
สิ่งนี้ดูเหมือนจะไม่ทำงานฉันมักจะได้รับCan't install <current directory>: Missing package name
Tibor Blenessy

1
@TiborBlenessy สมมติว่าคุณกำลังพูดถึงคำสั่งการติดตั้งที่สอง โปรดตรวจสอบให้แน่ใจว่าคุณมีไฟล์ package.json ที่ถูกต้องในไดเรกทอรีปัจจุบันของคุณ หากยังใช้งานไม่ได้ให้แจ้งให้เราทราบเวอร์ชัน npm ของคุณ ขั้นตอนเหล่านี้ใช้เพื่อทำงานกับเวอร์ชัน npm ที่ระบุ และถ้าพวกเขาทำไม่ได้อีกต่อไปฉันชอบที่จะดำน้ำลึกและไปที่ต้นตอของปัญหา
Rohit Sharma

1
@RohitSharma ใช้ npm 6.0.0 วิธีนี้ใช้ไม่ได้ตามที่คาดไว้package.jsonไฟล์ใน./install/here
Christian Ivicevic

@ChristianIvicevic คุณสามารถใช้การติดตั้ง npm --prefix ./install/here ./ เพื่อติดตั้ง package.json ในไดเรกทอรีปัจจุบันไปยังไดเรกทอรี "./install/here" มีสิ่งหนึ่งที่ฉันสังเกตเห็นบน Mac ว่ามันสร้าง symlink ไปยังโฟลเดอร์หลักภายในไดเรกทอรี node_modules แต่ก็ยังใช้งานได้กับ npm 6.0.0
Rohit Sharma

1
@Tanoro คำสั่งที่สามจะทำงานกับ npm 6.0.0 พร้อมการสร้าง symlink ตามที่ระบุไว้ในคำตอบ ฉันไม่เคยลอง 2 คำสั่งแรกด้วย npm v3.5.2 ซึ่งเป็นสาเหตุที่ฉันพูดถึงรุ่นเฉพาะของ npm ที่ฉันลองด้วย โปรดอัปเดตคำตอบด้วยคำสั่งที่ใช้งานได้สำหรับรุ่นอื่นด้วย
Rohit Sharma

0

ฉันกำลังสร้าง PowerShell และไม่สามารถรับ npm ให้ทำงานได้โดยไม่ต้องเปลี่ยนไดเรกทอรีปัจจุบัน

จบลงด้วยการใช้คำสั่งเริ่มต้นและเพียงระบุไดเรกทอรีการทำงาน:

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