ระบุพา ธ ไปยัง node_modules ใน package.json


96

มีวิธีย้ายไดเร็กทอรี node_modules ในแอปพลิเคชันหรือไม่เพื่อสมมติว่า / vendor / node_modules เช่น bower ทำกับไฟล์ bowerrc หรือไม่ ฉันคิดว่ามันสามารถระบุได้ใน package.json แต่ดูเหมือนจะหาวิธีแก้ไขไม่ได้ ความช่วยเหลือของคุณได้รับการชื่นชมมาก


ฉันเดาว่าบางอย่างคล้ายกับhttp://stackoverflow.com/questions/18974436/change-node-modules-location
sachinjain024

@blunderboy ขอบคุณสำหรับลิงค์ มันบ้ามากที่ไม่มีทางทำได้ง่ายกว่านี้ โอ้ดี.
sturoid

26
ฉันไม่แน่ใจว่าทำไมคุณถึงยอมรับคำตอบที่ไม่ได้ตอบคำถามของคุณอย่างชัดเจน คุณถามวิธีกำหนดเส้นทางไปnode_modules ในpackage.jsonและคำตอบของ xShirase ก็ไม่ได้ระบุวิธีการทำเช่นนั้น
Mark Amery

4
เขาคงยอมรับคำตอบเพราะนี่เป็นปัญหา XYอย่างชัดเจนและทางเลือกอื่นดีกว่า "ขออภัยเป็นไปไม่ได้"
Jake Holzinger

คำตอบ:


58

ใช่คุณทำได้เพียงตั้งค่าตัวแปร env NODE_PATH:

export NODE_PATH='yourdir'/node_modules

ตามเอกสาร:

หากตัวแปรสภาพแวดล้อม NODE_PATH ถูกตั้งค่าเป็นรายการพา ธ สัมบูรณ์ที่คั่นด้วยเครื่องหมายโคลอนโหนดจะค้นหาพา ธ เหล่านั้นสำหรับโมดูลหากไม่พบที่อื่น (หมายเหตุ: ใน Windows NODE_PATH ถูกคั่นด้วยอัฒภาคแทนเครื่องหมายทวิภาค)

นอกจากนี้โหนดจะค้นหาในตำแหน่งต่อไปนี้:

1: $ HOME / .node_modules

2: $ HOME / .node_libraries

3: $ PREFIX / lib / โหนด

โดยที่ $ HOME คือโฮมไดเร็กทอรีของผู้ใช้และ $ PREFIX คือโหนดที่กำหนดค่า node_prefix

สิ่งเหล่านี้ส่วนใหญ่เป็นเหตุผลทางประวัติศาสตร์ ขอแนะนำให้คุณวางการอ้างอิงของคุณไว้ในโฟลเดอร์ node_modules พวกเขาจะโหลดได้เร็วขึ้นและเชื่อถือได้มากขึ้น

ที่มา


1
เป็นสิ่งที่ดี. ดังนั้นในกรณีของฉันที่ฉันมี node_modules ในเครื่องสำหรับแต่ละแอปพลิเคชันที่ฉันกำลังสร้างฉันจะส่งออกเป็นไฟล์ js ในโครงการหรือไม่
sturoid

3
ไม่มันเป็นตัวแปรสภาพแวดล้อมตั้งค่าที่ระดับระบบ ดังนั้นคุณต้องพิมพ์ลงในเทอร์มินัลของคุณ มีการเข้าถึงตัวแปร env ภายในแอปโหนดในprocess.env
xShirase

อืมฟังดูดี ฉันจะต้องตรวจสอบเพิ่มเติม ขอบคุณสำหรับความช่วยเหลือ
sturoid

112
ฉันไม่คิดว่านี่จะเป็นคำตอบสำหรับคำถามจริงๆ: เขากำลังขอคุณสมบัติภายใน package.json เพื่อวางเส้นทางสำหรับ LOCAL (ระดับแอปพลิเคชัน) npm-Packages คำตอบนี้บอกเขาว่าเขาจะย้ายแพ็คเกจที่ติดตั้ง GLOBALLY (-g) ไปไว้ในโฟลเดอร์อื่นได้อย่างไร
David Losert

2
@IsmailIqbal ขออภัยฉันเห็นความคิดเห็นของคุณในตอนนี้ เป็นเวลาสองปีในโลก NPM และเราใช้เวลาอย่างก้าวกระโดดด้วยการแคชเส้นด้ายหรือแม้กระทั่ง npm5, webpack ... ฉันว่าการจัดการ node_module ในวันนี้ดีกว่า ในกรณีของคุณฉันเพียงแค่ทำการ "ติดตั้ง npm" ในทุกที่ - เนื่องจาก npm แคชแพ็กเกจที่ติดตั้งไว้แล้วมันก็เหมือนกับการคัดลอกด้วยตนเองโดยไม่มีค่าใช้จ่าย
David Losert

28

กล่าวโดยย่อ: เป็นไปไม่ได้และดูเหมือนว่าจะไม่ได้รับการสนับสนุน (ดูที่นี่https://github.com/npm/npm/issues/775 )

มีพื้นที่ทำงานที่แฮ็กโดยใช้ CLI หรือ ENV-Variables (ดูคำตอบที่เลือกในปัจจุบัน), .npmrc-Config-Files หรือnpm link- สิ่งที่พวกเขาทั้งหมดมีเหมือนกัน: พวกเขาไม่ได้เป็นเพียงโครงการเฉพาะ แต่บางประเภทเสมอไป ของglobalโซลูชั่น

สำหรับฉันแล้วไม่มีวิธีแก้ปัญหาใดที่สะอาดเพราะผู้ร่วมให้ข้อมูลในโครงการของคุณจำเป็นต้องสร้างการกำหนดค่าพิเศษหรือมีความรู้พิเศษอยู่เสมอซึ่งไม่สามารถทำได้npm installและใช้ได้

ดังนั้น: คุณจะต้องใส่ package.json ของคุณไว้ในไดเร็กทอรีเดียวกันกับที่คุณต้องการติดตั้ง node_modules ของคุณหรืออยู่กับความจริงที่ว่ามันจะอยู่ใน root-dir ของโปรเจ็กต์ของคุณเสมอ


16
"หากคุณต้องการสะกด" node_modules "ให้แตกต่างออกไปขออภัยไม่สามารถทำได้ซึ่งสร้างขึ้นในโหนดคอร์การเปลี่ยนแปลงนั้นเท่ากับการสร้างตัวจัดการแพ็กเกจที่แตกต่างกันโดยสิ้นเชิง" <== ทำได้ดีโดยใช้ตัวแปรฉันเดา
stevedbrown

ความคิดเห็นจากปี 2019: ดูเหมือนว่า yarn รองรับการลบล้างไดเร็กทอรีโมดูล ฉันคิดว่าเส้นด้ายเป็นผู้จัดการแพ็คเกจใหม่
Vanuan

10

เส้นด้ายรองรับคุณสมบัตินี้:

# .yarnrc file in project root
--modules-folder /node_modules

แต่ประสบการณ์ของคุณอาจแตกต่างกันไปขึ้นอยู่กับแพ็คเกจที่คุณใช้ ฉันไม่แน่ใจว่าคุณต้องการเข้าไปในโพรงกระต่ายนั่น


6

ฉันไม่แน่ใจว่านี่คือสิ่งที่คุณคิดไว้หรือเปล่า แต่ฉันจบลงด้วยคำถามนี้เพราะฉันไม่สามารถติดตั้งnode_modulesภายในโครงการของฉันได้เนื่องจากติดตั้งบนระบบไฟล์ที่ไม่รองรับ symlinks (โฟลเดอร์ VM "shared" ).

ฉันพบวิธีแก้ปัญหาต่อไปนี้:

  1. คัดลอกpackage.jsonไฟล์ไปยังโฟลเดอร์ temp บนระบบไฟล์อื่น
  2. วิ่งไปที่npm installนั่น
  3. คัดลอกnode_modulesไดเร็กทอรีผลลัพธ์กลับไปที่ dir โครงการโดยใช้cp -r --dereferenceเพื่อขยาย symlinks ลงในสำเนา

ฉันหวังว่านี่จะช่วยคนอื่นที่เจอคำถามนี้เมื่อกำลังมองหาวิธีย้ายnode_modulesไปยังระบบไฟล์อื่น

ตัวเลือกอื่น

มีวิธีแก้ปัญหาอื่นที่ฉันพบในปัญหา github ที่ @Charminbear เชื่อมโยงไปแต่สิ่งนี้ใช้ไม่ได้gruntเพราะไม่รองรับNODE_PATHตามhttps://github.com/browserify/resolve/issues/136 :

สมมติว่าคุณมี/media/sf_sharedและคุณไม่สามารถติดตั้ง symlink ได้ซึ่งหมายความว่าคุณไม่สามารถติดตั้ง npm ได้ /media/sf_shared/myprojectเนื่องจากบางโมดูลใช้ symlink

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (คุณสามารถ symlink ในทิศทางนี้ได้ แต่ไม่สามารถสร้างได้ภายใน / media / sf_shared)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.