คุณสามารถโฮสต์ที่เก็บส่วนตัวสำหรับองค์กรของคุณเพื่อใช้กับ npm ได้หรือไม่?


220

Npm ดูเหมือนเป็นแพลตฟอร์มที่ยอดเยี่ยมสำหรับใช้ภายในองค์กรอยากรู้ว่า repo ส่วนตัวเป็นไปได้เช่นเดียวกับ Nexus / Maven ไม่มีอะไรเกิดขึ้นใน Google :(


1
ด้านล่างเป็นเอกสารที่ค่อนข้างเรียบร้อยวิธีการทำ: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repositoryนี่เป็นสิ่งเดียวกับ pvorb ที่อธิบายไว้ในคำตอบของเขา
ramesh.mimit

2
โปรดทราบว่าโพสต์clock.co.ukเป็นสำเนาที่สมบูรณ์ของรีจิสทรี npm สำหรับแคชในการอ้างอิงของคุณต้องแก้ปัญหาที่ดีที่สุดที่ฉันได้พบเป็นnpm_lazy เอกสารบนส้อมของฉันอาจจะติดตามได้ง่ายขึ้นเล็กน้อย
Jake Berger

1
ฉันรู้ว่าฉันเพิ่งจะมีการอภิปรายกันเล็กน้อย แต่ฉันต้องการเพิ่มว่าเราเพิ่งเพิ่มการสนับสนุนรีจิสทรี npm ส่วนตัวให้กับผลิตภัณฑ์ProGet
Karl Harnagy

2
ตามที่ระบุไว้ด้านล่างตอนนี้ Nexus สนับสนุนโฮสต์และพร็อกซีเอ็นพีอาร์ repos
Zac Thompson

8
ในช่วงหลายปีที่ผ่านมามีตัวเลือกมากมายให้เลือกใช้ ทุกคนที่กลับมาที่นี่ควรอ่านคำตอบทั้งหมดไม่ใช่เฉพาะคำตอบที่ฉันยอมรับในปี 2011
adam

คำตอบ:


101

ฉันไม่คิดว่าจะมีวิธีง่ายๆในการทำเช่นนี้

ดูที่เอกสาร NPMบอกเราว่ามันเป็นไปได้ที่:

ฉันสามารถรันรีจิสตรีส่วนตัวของฉันเองได้หรือไม่?

ใช่

วิธีที่ง่ายที่สุดคือการทำซ้ำฐานข้อมูลที่นอนและใช้เอกสารการออกแบบเดียวกัน (หรือคล้ายกัน) เพื่อใช้ API

หากคุณตั้งค่าการจำลองแบบต่อเนื่องจาก CouchDB อย่างเป็นทางการจากนั้นตั้งค่า CouchDB ภายในของคุณเป็นการกำหนดค่ารีจิสทรีคุณจะสามารถอ่านแพ็คเกจที่เผยแพร่นอกเหนือไปจากชุดส่วนตัวของคุณและโดยค่าเริ่มต้นจะเผยแพร่ภายในเท่านั้น หากคุณต้องการเผยแพร่แพคเกจเพื่อให้คนทั้งโลกได้เห็นคุณสามารถแทนที่การกำหนดค่า--registryสำหรับคำสั่งนั้นได้

นอกจากนี้ยังมีบทช่วยสอนที่ยอดเยี่ยมเกี่ยวกับวิธีสร้างที่เก็บส่วนตัว npmในบล็อกนาฬิกา

แก้ไข (2017-02-26):

ไม่ใหม่จริง ๆ แต่ตอนนี้มีแผนจ่ายให้โฮสต์แพ็คเกจส่วนตัวบน NPM

ในช่วงหลายปีที่ผ่านมา NPM ได้กลายเป็นปัจจัยสำหรับ บริษัท ที่ไม่ใช่ Node.js เช่นกันผ่านระบบนิเวศส่วนหน้าขนาดใหญ่ที่สร้างขึ้นบน NPM หาก บริษัท ของคุณกำลังรันSonatype Nexusสำหรับโฮสต์โครงการ Java ภายในคุณยังสามารถใช้สำหรับโฮสต์แพคเกจ NPM ภายในได้

ตัวเลือกอื่น ๆ ได้แก่JFrog ArtifactoryและInedo ProGetแต่ฉันไม่ได้ใช้สิ่งเหล่านั้น


201

https://github.com/isaacs/npmjs.org/ : ใน npm เวอร์ชั่น v1.0.26 คุณสามารถระบุที่เก็บ git ส่วนตัว url เป็นการอ้างอิงในไฟล์ package.json ของคุณ ฉันไม่ได้ใช้ แต่ต้องการความคิดเห็น นี่คือสิ่งที่คุณต้องทำ:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://git@yourgitserver.com:my-app.git#v0.0.1",
    }
}

โพสต์ต่อไปนี้พูดคุยเกี่ยวกับเรื่องนี้: Debuggable: โมดูลส่วนตัว npm


3
นั่นเป็นคุณสมบัติที่ยอดเยี่ยม แต่ฉันยอมรับ pvorb's เพราะฉันถูกถามเกี่ยวกับการโฮสต์ repo NPM ทั้งหมดซึ่งเป็น repo Maven ภายใน
adam

2
หมายเหตุ: ปัจจุบัน NPM ไม่สนับสนุนการระบุช่วงเวอร์ชันด้วย URL git เหล่านี้ (เช่น 1.2.x หรือ ^ 1.2.3) github.com/npm/npm/issues/3328
Clay

@Clay คุณสามารถระบุแท็ก (v0.0.1) ได้ใช่ไหม
mcha

ใช่คุณสามารถทำแท็กที่แน่นอน
Clay

มีวิธีใช้ GitHub ปรับใช้คีย์เพื่อรับรองความถูกต้องกับ repos ส่วนตัวหรือไม่
sunknudsen

91

มีแพคเกจ npm ที่ใช้งานง่ายเพื่อทำสิ่งนี้ https://www.npmjs.org/package/sinopia

สรุป Sinopia เป็นเซิร์ฟเวอร์ที่เก็บส่วนตัว / แคช npm ที่คุณสามารถตั้งค่าด้วยการกำหนดค่าเป็นศูนย์

Sinopia สามารถใช้เพื่อ:

  • เผยแพร่แพ็คเกจส่วนตัวของตัวเองโดยไม่เปิดเผยต่อสาธารณะ
  • แคชเฉพาะแพ็คเกจสาธารณะที่ใช้ (ไม่จำเป็นต้องทำซ้ำทะเบียนสาธารณะทั้งหมด)
  • แทนที่แพ็กเกจสาธารณะด้วยเวอร์ชันที่แก้ไขที่สร้างขึ้นภายใน

13
ดูเหมือนว่า Sinopia จะไม่ได้รับการบำรุงรักษาอีกต่อไป การกระทำครั้งล่าสุดเมื่อ 8 เดือนที่แล้ว ณ วันนี้ (7 มีนาคม 2559) มันดูดีและทำงานได้ดี แต่ต้องระวังการบำรุงรักษา
Ray Booysen

45
ตรวจสอบverdaccio มันเป็นทางแยกที่ได้รับการบำรุงรักษาอย่างแข็งขัน: github.com/verdaccio/verdaccio
Rotareti

1
verdaccio สนับสนุนการตั้งค่า "ส่วนตัวเท่านั้น" ซึ่งจะไม่สอบถามรีจิสตรีใด ๆ
MarkusSchaber

1
@MarkusSchaber คุณสามารถปิดการใช้งานพรอกซีไปยังการลงทะเบียนอื่น มันทำงานในโหมดออฟไลน์แม้ว่าพร็อกซีจะพยายามเข้าถึงเครือข่าย
Juan Picado

1
ฉันสิ่งที่ Verdaccio สมควรได้รับจริงๆเป็นคำตอบของตัวเองวันนี้stackoverflow.com/a/50815174/336753ฉันไม่ได้สังเกตเห็นความคิดเห็นที่นี่ก่อน
kub1x

40

Verdaccioเป็นสิ่งที่ฉันกำลังมองหาและมันสมควรได้รับคำตอบของตัวเอง;) มันเป็นทางแยกของ Sinopia (คำตอบที่ได้รับการตอบกลับอย่างสูง) มันเป็นรีจิสทรี npm เป็นแพคเกจ npmและสามารถพบได้

ที่นี่: https://github.com/verdaccio/verdaccio ,
ที่นี่: https://www.verdaccio.org ,
ที่นี่: pnpm i -g verdaccioหรือ
ที่นี่:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio


2
นี้! ขอบคุณ -> นักเทียบท่าวิ่ง -it --rm --detach - ชื่อ verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm

1
@mwm ขอบคุณ เพิ่มเวอร์ชั่นนักเทียบท่าลงในรายการ
kub1x

28

ในวันที่ 14 เมษายน (2015) มีการแนะนำโมดูลส่วนตัว npm

เมื่อคุณชำระเงินสำหรับโมดูลส่วนตัวคุณสามารถ:

  • โฮสต์แพ็คเกจส่วนตัวมากเท่าที่คุณต้องการ
  • ให้สิทธิ์การเข้าถึงเพื่ออ่านหรืออ่าน - เขียนสำหรับแพ็คเกจเหล่านั้นแก่ผู้ใช้ที่ชำระเงินรายอื่น
  • ติดตั้งและใช้แพคเกจใด ๆ ที่ผู้ใช้รายอื่นได้ให้สิทธิ์แก่คุณในการอ่าน
  • ทำงานร่วมกันในแพ็คเกจใด ๆ ที่ผู้ใช้ที่ชำระเงินรายอื่นได้ให้สิทธิ์การเขียนแก่คุณ

แน่นอนมันไม่ฟรี - ปัจจุบัน 7 $ ต่อเดือนต่อผู้ใช้

และยังคงเป็นบริการใหม่ที่น่ารัก ตัวอย่างเช่นการสนับสนุนบัญชีองค์กรหายไป (ณ เดือนมิถุนายน 2558):

ปัจจุบันแพ็คเกจส่วนตัวมีให้บริการสำหรับผู้ใช้รายบุคคลเท่านั้น แต่การสนับสนุนบัญชีองค์กรกำลังจะมาเร็ว ๆ นี้ อย่าลังเลที่จะสร้างผู้ใช้สำหรับองค์กรของคุณในระหว่างนี้และเราสามารถอัปเกรดเป็นองค์กรเมื่อการสนับสนุนอยู่ที่นี่

ดังนั้นแม้ว่าจะไม่สมบูรณ์แบบมันเป็นคำตอบที่เป็นทางการสำหรับการดูแลแพคเกจส่วนตัว

UPDATE

แพคเกจส่วนตัว Npmพร้อมใช้งานแล้วพร้อมแผนสำหรับผู้ใช้รายบุคคลและองค์กร :

  • ไม่ จำกัด จำนวนแพ็คเกจสาธารณะและส่วนตัว
  • $ 7 / เดือน / พัฒนา
  • รวมชื่อขอบเขตหนึ่งชื่อตามชื่อองค์กร
  • เผยแพร่และควบคุมการเข้าถึง @ org-name / foo

(ข้อจำกัดความรับผิดชอบ: ไม่ได้มีส่วนเกี่ยวข้องในระยะไกลด้วยวิธีใด ๆ กับnpm, Inc. )


20

ผู้จัดการพื้นที่เก็บข้อมูลที่รองรับการลงทะเบียน NPM ส่วนตัว:


4
เฉพาะรุ่นที่จ่ายเงินรองรับที่เก็บ npm รุ่นฟรีทำไม่ได้
Boon

12
รุ่นฟรีของ Sonatype Nexus 3.0 รองรับการกู้คืน repPM ของ npm (พร้อมกับ repower bower และ docker)
n8n8baby

10

ฉันเดาว่ากระทู้นี้ต้องมีการอัพเดท ถ้าคุณดูการลงทะเบียน npm ใด ๆ ที่มีอยู่พวกเขาจะหนักมากและพวกเขาต้องการ couchdb Gemfurry และคนอื่น ๆ ต้องการให้คุณแยกจาก repos สาธารณะ บางส่วนของเงา -npm เหมือน npm ไม่มีข้อผูกพันล่าสุดไม่มีกระทำที่ผ่านมา

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


9

ยกโทษให้ฉันถ้าฉันไม่เข้าใจคำถามของคุณดี แต่นี่คือคำตอบของฉัน:

คุณสามารถสร้างโมดูล npm ส่วนตัวและใช้คำสั่งปกติของ npm เพื่อติดตั้ง ผู้ใช้ node.js ส่วนใหญ่ใช้ git เป็นที่เก็บของพวกเขา แต่คุณสามารถใช้ที่เก็บอะไรก็ได้ที่เหมาะกับคุณ

  1. ในโครงการของคุณคุณจะต้องการโครงกระดูกของแพ็คเกจ NPM โมดูลโหนดส่วนใหญ่มีที่เก็บ git ซึ่งคุณสามารถดูวิธีการรวมเข้ากับ NPM (ไฟล์ package.json ฉันเชื่อว่าเป็นส่วนหนึ่งของเว็บไซต์นี้และเว็บไซต์ของ NPM จะแสดงวิธีสร้างแพ็คเกจ npm)
  2. ใช้บางสิ่งบางอย่างที่คล้ายกันในการทำและทำแพคเกจของคุณให้พร้อมใช้งานจากอินเทอร์เน็ตหรือเครือข่ายของคุณเพื่อทำการติดตั้งสำหรับการดาวน์โหลด npm
  3. เมื่อทำแพคเกจของคุณแล้วใช้

    npm ติดตั้ง * tarball_url *


5
คุณไม่ได้คำถามของเขา แต่คำตอบนั้นมีประโยชน์มากสำหรับฉัน! :)
Eduardo Costa

7

นี่เป็นวิธีที่ง่ายที่สุดที่ฉันรู้ - เก็บไว้ในคลาวด์ด้วยGemfuryรีจิสทรี NPM ส่วนตัว

ได้ฟรีและคุณสามารถเข้าสู่ระบบด้วยบัญชี Github ของคุณ ควรประหยัดเวลาได้มากเมื่อเทียบกับการตั้งค่าฐานข้อมูลของคุณเอง


มันไม่ฟรี
I.Tyger

6

เรากำลังใช้ Sonatype Nexus เวอร์ชันคือ Nexus Repository ManagerOSS 3.6.1-02 และฉันแน่ใจว่ามันรองรับคลังเก็บส่วนตัวของ NPM และแคชแพ็กเกจ

ป้อนคำอธิบายรูปภาพที่นี่


5

สายไปงานเลี้ยงเล็ก ๆ น้อย ๆ แต่ NodeJS (ตั้งแต่ ~ 14 พ.ย. ฉันเดา) สนับสนุนการเก็บข้อมูล NPM ขององค์กร - คุณสามารถหาข้อมูลเพิ่มเติมได้จากเว็บไซต์ทางการของพวกเขาเว็บไซต์อย่างเป็นทางการ

จากภาพรวมคร่าวๆมันจะปรากฏว่า npmE อนุญาตให้มิร์เรอร์การทำมิเรอร์ของที่เก็บ NPM - นั่นคือมันจะค้นหาแพ็กเกจในที่เก็บ NPM จริงถ้าไม่พบหนึ่งในภายในของคุณ ดูเหมือนว่ามีประโยชน์มาก!

เอ็นพีพีเอ็นเตอร์ไพรส์เป็นโซลูชั่นในสถานที่สำหรับการแบ่งปันและแจกจ่ายโมดูล JavaScript ภายในองค์กรของคุณอย่างปลอดภัยจากทีมงานที่ดูแล npm และรีจิสตรี npm สาธารณะ มันออกแบบมาสำหรับทีมที่ต้องการ:

การใช้งานร่วมกันภายในของโมดูลส่วนตัวได้ง่ายขึ้นการควบคุมการพัฒนาและการปรับใช้เวิร์กโฟลว์ความปลอดภัยที่เข้มงวดยิ่งขึ้นเกี่ยวกับการปรับใช้โมดูลโอเพ่นซอร์สที่สอดคล้องกับข้อกำหนดทางกฎหมายเพื่อให้รหัสโฮสต์ในสถานที่ npmE เป็นส่วนตัว npm

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

น่าเสียดายที่มันไม่ฟรี คุณสามารถทดลองใช้ได้ แต่เป็นซอฟต์แวร์เชิงพาณิชย์ นี่ไม่ใช่บิตที่ยอดเยี่ยมสำหรับนักพัฒนาเดี่ยว แต่ถ้าคุณเป็นนักพัฒนาเดี่ยวคุณมี GitHub :-)


3

โพสต์นี้พูดถึงเกี่ยวกับวิธีตั้งค่ารีจิสทรีส่วนตัว

  • ตรวจสอบให้แน่ใจว่าติดตั้ง couchdb ในระบบของคุณแล้ว
  • การจำลอง npmjs.org ใช้คำสั่งต่อไปนี้

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

หมายเหตุมี "continuous":trueในคำสั่งสิ่งนี้ใช้ _changes API ของ CouchDB และจะดึงการเปลี่ยนแปลงใหม่ ๆ เมื่อ API นี้ได้รับแจ้ง

"cancel":trueถ้าคุณเคยต้องการที่จะหยุดซ้ำเหล่านี้คุณสามารถเพิ่ม จากนั้นสคริปต์ก็จะเป็น

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

จากนั้นไปที่npmjs.org readmeเพื่อติดตั้ง npm (ตรวจสอบให้แน่ใจnodejsและgitติดตั้งแล้ว) การเป่าเป็นขั้นตอนทั้งหมด

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 

1
URL isaacs.iriscouch.com/registryน่าเสียดายที่ตายแล้ว ฉันพยายามเปลี่ยนเป็นskimdb.npmjs.com/registryซึ่งดูเหมือนว่าจะทำงานในตอนแรก แต่มันเป็นการจำลองแบบเฉพาะดัชนีรีจิสทรีและไม่ใช่ tarballs ...
fuzzyTew

couchappรัฐ README ที่ couchapp คือตอนนี้เลิกใช้แล้วครับ แต่ก็ยังกล่าวว่าทางปัจจุบันเพื่อสะท้อนรีจิสทรีทั้งหมดคือการใช้NPM-fullfat รีจิสทรี
fuzzyTew

ฉันลงเอยด้วยการใช้static-registryสำหรับสิ่งนี้ซึ่งแตกต่างจากโซลูชัน couchdb ที่ไม่ต้องการการกำหนดค่าเลย
fuzzyTew


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