หลีกเลี่ยง ../../../../../../ ..
ไม่ใช่ทุกสิ่งในแอปพลิเคชันที่เหมาะสมเป็นของสาธารณะ npm และค่าใช้จ่ายในการตั้งค่า npm ส่วนตัวหรือ git repo ยังคงค่อนข้างใหญ่ในหลายกรณี ต่อไปนี้เป็นวิธีการบางส่วนในการหลีกเลี่ยง
../../../../../../../
ปัญหาเส้นทางสัมพัทธ์
node_modules
บางครั้งผู้คนคัดค้านการวางโมดูลเฉพาะแอปพลิเคชันลงใน node_modules เนื่องจากไม่ชัดเจนว่าจะตรวจสอบโมดูลภายในของคุณอย่างไรโดยไม่ตรวจสอบในโมดูลบุคคลที่สามจาก npm
คำตอบนั้นง่ายมาก! หากคุณมี.gitignore
ไฟล์ที่ละเว้นnode_modules
:
node_modules
คุณสามารถเพิ่มข้อยกเว้น!
สำหรับแต่ละโมดูลแอปพลิเคชันภายในของคุณ:
node_modules/*
!node_modules/foo
!node_modules/bar
โปรดทราบว่าคุณไม่สามารถยกเลิกการลงทะเบียนไดเรกทอรีย่อยหากผู้ปกครองถูกเพิกเฉยแล้ว ดังนั้นแทนที่จะเพิกเฉยnode_modules
คุณต้องเพิกเฉยทุก ๆ ไดเรกทอรีที่อยู่ภายใน node_modules
ด้วย
node_modules/*
เคล็ดลับแล้วคุณสามารถเพิ่มข้อยกเว้นของคุณ
ตอนนี้ทุกที่ในแอปพลิเคชันของคุณคุณจะสามารถrequire('foo')
หรือrequire('bar')
ไม่มีเส้นทางญาติที่ใหญ่และบอบบาง
หากคุณมีโมดูลจำนวนมากและต้องการแยกโมดูลเหล่านี้ออกจากโมดูลของบุคคลที่สามที่ติดตั้งโดย npm คุณสามารถวางโมดูลเหล่านั้นไว้ในไดเรกทอรีnode_modules
เช่นnode_modules/app
:
node_modules/app/foo
node_modules/app/bar
ตอนนี้คุณจะสามารถrequire('app/foo')
หรือrequire('app/bar')
จากที่ใดก็ได้ในแอปพลิเคชันของคุณ
ในของคุณ.gitignore
เพียงเพิ่มข้อยกเว้นสำหรับnode_modules/app
:
node_modules/*
!node_modules/app
หากแอปพลิเคชันของคุณมีการแปลงการกำหนดค่าใน package.json คุณจะต้องสร้าง package.json แยกต่างหากด้วยฟิลด์การแปลงของตัวเองในไดเรกทอรีส่วนประกอบของคุณnode_modules/foo
หรือnode_modules/app/foo
เนื่องจากการแปลงไม่ได้ใช้ข้ามขอบเขตของโมดูล สิ่งนี้จะทำให้โมดูลของคุณแข็งแกร่งขึ้นเมื่อเทียบกับการเปลี่ยนแปลงการกำหนดค่าในแอปพลิเคชันของคุณและมันจะง่ายกว่าที่จะนำแพคเกจภายนอกมาใช้อย่างอิสระ
symlink
เคล็ดลับที่มีประโยชน์อีกอย่างถ้าคุณกำลังทำงานกับแอปพลิเคชันที่คุณสามารถสร้าง symlink และไม่จำเป็นต้องสนับสนุน windows ก็คือการเชื่อมโยง a lib/
หรือapp/
โฟลเดอร์เข้าnode_modules
ด้วยกัน จากรูทโปรเจ็กต์ให้ทำ:
ln -s ../lib node_modules/app
และตอนนี้จากที่ใดก็ได้ในโครงการของคุณคุณจะต้องใช้ไฟล์ในlib/
การดำเนินการrequire('app/foo.js')
เพื่อให้ได้lib/foo.js
มา
เส้นทางที่กำหนดเอง
คุณอาจเห็นสถานที่บางแห่งพูดถึงการใช้$NODE_PATH
ตัวแปรสภาพแวดล้อมหรือopts.paths
เพิ่มไดเรกทอรีสำหรับโหนดและเบราว์เซอร์เพื่อค้นหาโมดูล
ไม่เหมือนกับแพลตฟอร์มอื่น ๆ ส่วนใหญ่การใช้อาร์เรย์สไตล์เชลล์ของไดเรกทอรีพา ธ ด้วย$NODE_PATH
ไม่ดีเท่าในโหนดเมื่อเทียบกับการใช้node_modules
ไดเรกทอรีอย่างมีประสิทธิภาพ
นี่เป็นเพราะแอปพลิเคชันของคุณเชื่อมต่ออย่างแน่นหนากับการกำหนดค่าสภาพแวดล้อมรันไทม์มากขึ้นดังนั้นจึงมีชิ้นส่วนที่เคลื่อนไหวได้มากขึ้นและแอปพลิเคชันของคุณจะทำงานเฉพาะเมื่อสภาพแวดล้อมการตั้งค่าถูกต้อง
โหนดและ browserify สนับสนุนทั้งสอง
$NODE_PATH
แต่กีดกันการใช้งานของ