วิธีการตั้งค่าตำแหน่งที่กำหนดเองสำหรับการติดตั้งแพคเกจ npm ในเครื่อง?


177

เป็นไปได้หรือไม่ที่จะระบุปลายทางของแพ็คเกจที่กำหนดเองnpm installไม่ว่าจะผ่านแฟล็กคำสั่งหรือตัวแปรสภาพแวดล้อม

โดยค่าเริ่มต้นการติดตั้งท้องถิ่น NPM สิ้นสุดในnode_modulesภายในไดเรกทอรีปัจจุบัน แต่ฉันต้องการให้ติดตั้งลงในภายในไดเรกทอรีที่แตกต่างกันเช่นnode_modules vendor/node_modulesฉันจะทำให้เกิดขึ้นได้อย่างไร


คุณพยายามทำอะไร สิ่งนี้ถูกกล่าวถึงที่นี่: stackoverflow.com/questions/13668097/…
Pascal Belloncle

10
@PascalBelloncle: แทนที่จะติดตั้งแพคเกจลงในไดเรกทอรีย่อยของ./node_modulesผมต้องการ NPM ./vendor/node_modulesในการติดตั้งพวกเขาเข้าไปในไดเรกทอรีย่อยของ (หรือบอกได้เลยว่ามันไม่สามารถกำหนดค่าได้)
pje

1
ฉันเข้าใจว่าเป็นสิ่งที่คุณต้องการทำซึ่งฉันไม่คิดว่าเป็นไปได้นอกกรอบ บวกกับต้องการจะไม่ทำงานอย่างใดอย่างหนึ่ง ดังนั้นฉันจึงถามว่าทำไมคุณถึงต้องการทำเช่นนี้ อาจมีทางเลือกอื่นในการทำสิ่งที่คุณต้องการ
Pascal Belloncle

1
ฉันกำลังติดตั้งแพคเกจสำหรับไบนารีของตัวเองเท่านั้น (นั่นคือมันจะถูกใช้เฉพาะในบรรทัดคำสั่งและไม่เคยrequired) แต่ฉันไม่ต้องการที่จะติดตั้งทั่วโลก
pje

ฉันเห็น. ดูคำแนะนำของฉันด้านล่างแล้ว
Pascal Belloncle

คำตอบ:


180

TL; DR

คุณสามารถทำได้โดยใช้--prefixแฟล็กและ--globalแฟล็ก *

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* แม้จะเป็นการติดตั้ง "ทั่วโลก", ถังติดตั้งจะไม่สามารถเข้าถึงได้ผ่านบรรทัดคำสั่งเว้นแต่มีอยู่ใน~/foo/vendor/node_modulesPATH

TL; R

ทุกคุณสมบัติที่กำหนดค่าได้npmสามารถตั้งค่าได้ในหกที่แตกต่างกัน ตามลำดับความสำคัญ:

  • ธงบรรทัดคำสั่ง: --prefix ./vendor/node_modules
  • ตัวแปรสภาพแวดล้อม: NPM_CONFIG_PREFIX=./vendor/node_modules
  • ไฟล์กำหนดค่าผู้ใช้: $HOME/.npmrcหรือuserconfigพารามิเตอร์
  • ไฟล์กำหนดค่าส่วนกลาง: $PREFIX/etc/npmrcหรือuserconfigพารามิเตอร์
  • ไฟล์กำหนดค่าในตัว: path/to/npm/itself/npmrc
  • การกำหนดค่าเริ่มต้น: node_modules / npmconf / config-defs.js

./node_modulesโดยค่าเริ่มต้นแพคเกจในประเทศที่ติดตั้งเข้าไปใน คนทั่วโลกเข้าไปในprefixตัวแปรการตั้งค่า ( /usr/localโดยค่าเริ่มต้น)

คุณสามารถเรียกใช้npm config listเพื่อดูการกำหนดค่าปัจจุบันของคุณและnpm config editการเปลี่ยนแปลง

PS

โดยทั่วไปnpmเอกสารของมีประโยชน์จริง ๆ โฟลเดอร์ส่วนเป็นภาพรวมที่มีโครงสร้างที่ดีของ NPM และการตั้งค่าส่วนตอบคำถามนี้


2
ตามที่ฉันทดสอบจริง ๆ ถ้าทำตามคำสั่งข้างต้นมันจะถูกติดตั้งลงในการ ./vendor/node_modules/lib/bowerใช้npm#3.8.0
e-cloud

2
เมื่อทำสิ่งนี้ฉันได้รับข้อผิดพลาดNo version provided in package.json
FooBar

bins won't be accessible through the command lineคุณเขียน แน่นอนว่าสามารถเรียกใช้โปรแกรมได้โดยใช้เส้นทางที่สมบูรณ์npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c: \ my_npm \ eslint --fix my.js`
Bernhard Döbler

13
เป็นไปได้ไหมที่จะได้รับสิ่งที่คล้ายกับไฟล์ package.json? เช่นถ้าฉันทำงานnpm installในไดเรกทอรี A พร้อมไฟล์ package.json แพคเกจจะถูกติดตั้งในไดเรกทอรี B ดูเหมือนว่าวิธีนี้เหมาะสำหรับการติดตั้งแต่ละแพ็คเกจ
Ryan-Neal Mes

1
มีวิธีการติดตั้งอ้างอิงทั้งหมดโดยใช้วิธีนี้หรือไม่ npm installติดตั้งการอ้างอิงในเครื่อง npm install X -g -prefix "..."ติดตั้งโมดูล X ไปยังคำนำหน้าnpm install -g -prefix "..."ติดตั้งแพคเกจปัจจุบันไปยังคำนำหน้า
AnnanFay

28

หากคุณต้องการสิ่งนี้ในการกำหนดค่าคุณสามารถตั้งค่าการกำหนดค่า npm ดังนี้:

npm config set prefix "$(pwd)/vendor/node_modules"

หรือ

npm config set prefix "$HOME/vendor/node_modules"

ตรวจสอบการกำหนดค่าด้วย

npm config ls -l

หรือตามที่ @pje พูดและใช้--prefixแฟล็ก


4
ฉันเชื่อว่านี่เป็นการตั้งค่าคำนำหน้าส่วนกลางหรือไม่ ดังนั้นการทำnpm installจะยังคงติดตั้งภายในเครื่องไป./node_modulesแต่จะติดตั้งnpm install -g "$(pwd)/vendor/node_modules"ฉันสามารถจินตนาการการตั้งค่านี้แล้วลืมมันกลับมาในภายหลังสงสัยว่าทำไมแพคเกจทั่วโลกของฉันมีการแสดงแปลก ๆ
AnnanFay

13

สำหรับ OSX คุณสามารถไปที่ผู้ใช้ของคุณ$HOME(อาจเป็น / Users / yourname /) และหากยังไม่มีอยู่ให้สร้าง.npmrcไฟล์ (ไฟล์ที่ npm ใช้สำหรับการกำหนดค่าผู้ใช้) และสร้างไดเรกทอรีสำหรับแพ็คเกจ npm ของคุณ ติดตั้งใน (เช่น / Users / yourname / npm) ในไฟล์. npmrc ให้ตั้งค่า "prefix" เป็นไดเร็กทอรี npm ใหม่ของคุณซึ่งจะเป็นตำแหน่งที่ติดตั้งแพ็กเกจ npm "โกลบอล" ที่จะติดตั้ง จะเห็นได้ว่าแพ็คเกจ "ส่วนกลาง" เหล่านี้ใช้ได้กับบัญชีผู้ใช้ของคุณเท่านั้น

ใน. npmrc:

prefix=${HOME}/npm

จากนั้นเรียกใช้คำสั่งนี้จากบรรทัดคำสั่ง:

npm config ls -l

ควรให้เอาต์พุตกับทั้งคอนฟิกูเรชันโลคัลของคุณและคอนฟิกูเรชันโกลบอล npm และคุณควรเห็นคอนฟิกูเรชันคำนำหน้าโลคัลของคุณสะท้อนอาจใกล้กับด้านบนของรายการเอาต์พุตแบบยาว

เพื่อความปลอดภัยฉันขอแนะนำวิธีการนี้ในการกำหนดค่าพฤติกรรมการใช้งาน npm ของบัญชีผู้ใช้ของคุณให้ดีขึ้นกว่าการสร้าง/usr/localโฟลเดอร์ของคุณ


9

ตัวอย่างเช่นบน Windows 7 สามารถใช้ชุดคำสั่ง / การดำเนินการต่อไปนี้

สร้างตัวแปรสภาพแวดล้อมส่วนบุคคลแบ็กสแลชคู่เป็นข้อบังคับ

  • ชื่อตัวแปร: %NPM_HOME%
  • ค่าตัวแปร: C:\\SomeFolder\\SubFolder\\

ตอนนี้ตั้งค่ากำหนดเป็นโฟลเดอร์ใหม่ (ชื่อไฟล์ตัวอย่าง):

  • ตั้งค่าโฟลเดอร์ npm

npm config set prefix "%NPM_HOME%\\npm"

  • ตั้งค่าโฟลเดอร์ npm-cache

npm config set cache "%NPM_HOME%\\npm-cache"

  • ตั้งค่าโฟลเดอร์ชั่วคราว npm

npm config set tmp "%NPM_HOME%\\temp"

คุณสามารถลบเนื้อหาของโฟลเดอร์ต้นฉบับก่อนที่จะเปลี่ยนการกำหนดค่า

  • ลบ npm-cache npm cache clear

  • แสดงรายการโมดูล npm npm -g ls

  • ลบโมดูล npm npm -g rm name_of_package1 name_of_package2


1
ขอบคุณฉันทำตามขั้นตอน แต่จะสร้างไดเรกทอรีชื่อ c: /% NPM_HOME% / npm เป็นต้นแทนที่จะเป็น c: / npm_home / npm
Jay

6

หลังจากค้นหาสิ่งนี้ด้วยตนเองแล้วฉันต้องการโครงการหลาย ๆ โครงการที่มีการพึ่งพาที่แบ่งปันเป็น DRYer ฉันได้พบ:

  • การติดตั้งแบบโลคัลเป็นวิธีโหนดสำหรับทุกสิ่งที่คุณต้องการใช้ผ่าน require()
  • การติดตั้งทั่วโลกนั้นใช้สำหรับไบนารีที่คุณต้องการในเส้นทางของคุณ แต่ไม่ได้มีไว้สำหรับสิ่งใดผ่านทาง require()
  • ใช้คำนำหน้าหมายความว่าคุณต้องเพิ่มความเหมาะสมbinและmanเส้นทางไป$PATH
  • npm link( ข้อมูล ) ให้คุณใช้การติดตั้งภายในเครื่องเป็นแหล่งข้อมูลสำหรับ globals

→ติดกับวิธีโหนดและติดตั้งในเครื่อง

Ref:

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