ที่เกี่ยวข้อง: โฟลเดอร์ node_modules เดียวสำหรับหลายโครงการ
หากไม่แนะนำ npm install -g
ทุกอย่าง และฉันไม่ต้องการเชื่อมโยงแต่ละโมดูล ฉันสามารถเชื่อมโยง <some project>/node_modules
ไปยังไดเร็กทอรีทั่วไปเพื่อแชร์โดยหลายโครงการได้หรือไม่
ที่เกี่ยวข้อง: โฟลเดอร์ node_modules เดียวสำหรับหลายโครงการ
หากไม่แนะนำ npm install -g
ทุกอย่าง และฉันไม่ต้องการเชื่อมโยงแต่ละโมดูล ฉันสามารถเชื่อมโยง <some project>/node_modules
ไปยังไดเร็กทอรีทั่วไปเพื่อแชร์โดยหลายโครงการได้หรือไม่
โหนดสามารถจัดการ symlink ได้อย่างสมบูรณ์แบบ วิธีที่จะบรรลุเป้าหมายนี้จะขึ้นอยู่กับวัตถุประสงค์บางประการของคุณ สิ่งที่สำคัญที่สุด: คุณต้องการมีประสบการณ์อะไรบ้างสำหรับนักพัฒนารายอื่นที่ดาวน์โหลดโปรเจ็กต์ของคุณจากการควบคุมเวอร์ชัน
เมื่อออกแบบประสบการณ์นี้ การอ่านเกี่ยวกับอัลกอริธึมการโหลดโมดูลโหนดจะเป็นประโยชน์อย่างยิ่ง เพื่อรับข้อมูลเชิงลึกเกี่ยวกับสิ่งที่เป็นไปได้
โดยทั่วไป คำแนะนำของฉันคืออย่าเกี่ยวข้องกับการพึ่งพาซ้ำกันระหว่างโปรเจ็กต์ "การแก้ไข" นี้ไม่คุ้มกับค่าบำรุงรักษา ซึ่งรวมถึง gridlock การพึ่งพา (ความต้องการที่ขัดแย้งกันของโครงการย่อย) และการจำเป็นต้องใช้เครื่องมือที่กำหนดเองในบางกรณีเพื่อพิจารณาโครงสร้างที่คุณกำหนดเอง
เมื่อหมดคำเตือนแล้ว เราจะทำยังไงดี? วิธีที่ง่ายที่สุดคือการสร้างซูเปอร์โปรเจ็กต์ที่สรุปโปรเจ็กต์ย่อยต่างๆ โครงการย่อยจะสืบทอดการพึ่งพาของโครงการซุปเปอร์อย่างมีประสิทธิภาพ
superproject/
|-- node_modules/
| +-- socket.io/
|-- package.json
|-- subprojectA/
| |-- node_modules/
| | +-- browserify/
| |-- package.json
| +-- app/
| +-- client.js
+-- subprojectB/
|-- node_modules/
| +-- express/
|-- package.json
+-- lib/
+-- server.js
โครงสร้างนี้ทำงานตามที่คุณคาดหวัง ไฟล์ภายในโครงการย่อยสามารถ require()
โมดูลของตนเองและโมดูลใดๆ ใน superproject/node_modules
ได้ แต่จะไม่ require()
โมดูลภายในโครงการย่อยพี่น้องได้อย่างง่ายดาย (ยังคงเป็นไปได้ที่จะทำเช่นนั้นผ่านเส้นทางที่ชัดเจน) กล่าวอีกนัยหนึ่ง client.js สามารถ require()
browserify และ socket.io โดยไม่มีเส้นทาง แต่จะต้องใช้เส้นทางไปยัง require()
express
สิ่งสำคัญคือ npm
จะค้นหา package.json แบบ "ค้นหา" และจัดการกับโมดูลในไดเร็กทอรี node_modules
ในฐานะพี่น้องกับไฟล์นั้นเมื่อทำการติดตั้ง ฯลฯ ซึ่งหมายความว่าไดเร็กทอรีการทำงานปัจจุบันของคุณต้องเป็น superproject
เพื่อติดตั้งโมดูลต่างๆ ในนั้น เว้นแต่โครงการย่อยของคุณไม่มีไฟล์ package.json
node_modules/[email protected]/library.js
แล้วเราจะไม่ต้องต่อสู้กับกำแพง ....
- person IVO GELOV; 11.09.2017
require('[email protected]')
เพราะนั่นอยู่ในที่เดียวเท่านั้น: package.json
- person Seth Holladay; 30.09.2017
package.json
- person IVO GELOV; 01.10.2017
require
หรือ import
ต้องการเวอร์ชันเฉพาะหรือเวอร์ชันใดเป็น ล่าสุด ที่ติดตั้งอยู่ในปัจจุบัน นอกจากนี้ยังดูขัดกับสัญชาตญาณสำหรับฉันที่ NPM ปฏิเสธที่จะทำงานเมื่อ node_modules
ในโฟลเดอร์โครงการเป็น symlink
- person IVO GELOV; 01.10.2017
node_modules
การเป็น symlink ควร ทำงานได้ดี ฉันไม่ได้ทดสอบสิ่งนี้โดยเฉพาะ แต่ถ้าไม่ได้ผลก็ดูเหมือนเป็นข้อบกพร่อง ฉันไม่ทราบถึงตัวเลือกการออกแบบหรือข้อจำกัดใด ๆ ที่จะกำหนดข้อจำกัดโดยที่ node_modules
จะต้องไม่เป็น symlink ที่กล่าวว่าบางที npm กำลังปิดบังมันอย่างไร้เดียงสา ในส่วนของมันเป็นหน้าที่ของตัวโหลดในการตรวจสอบ package.json นั่นคงจะดี น่าเสียดายที่มันไม่ได้ ฟังดูเหมือนเป็นวิธีแก้ปัญหาที่ดีและเป็นวิธีแก้ปัญหาที่สามารถนำไปใช้ใน userland ได้
- person Seth Holladay; 02.10.2017
node-modules
ภายนอกที่วางไว้ที่รูทของไดเร็กทอรีโครงการของฉัน ประเด็นของฉันคือไม่ต้องแชร์ไดเร็กทอรี node_modules
ข้ามโปรเจ็กต์ต่างๆ แต่เพื่อจัดการกับสภาพแวดล้อมที่จำกัดพื้นที่ของดิสก์ที่แบ่งพาร์ติชัน Raspberry Pi
- person Brad W; 23.12.2020