dapatkah Anda meng-host repositori pribadi untuk digunakan organisasi Anda dengan npm?

219

Npm terdengar seperti platform hebat untuk digunakan dalam organisasi, ingin tahu apakah repo pribadi dimungkinkan, seperti dengan Nexus / Maven. Tidak ada yang muncul di Google :(

adam
sumber
1
Di bawah ini adalah dokumentasi yang cukup rapi, bagaimana melakukannya: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository Ini sama dengan yang dijelaskan pvorb dalam jawabannya.
ramesh.mimit
2
Perhatikan bahwa postingan clock.co.uk adalah duplikat lengkap dari registri npm. Untuk cache lokal dari dependensi yang Anda butuhkan, solusi terbaik yang saya temukan adalah npm_lazy . Doc pada garpu saya mungkin sedikit lebih mudah diikuti.
Jake Berger
1
Saya tahu saya sedikit terlambat untuk diskusi, tetapi saya hanya ingin menambahkan bahwa kami baru saja menambahkan dukungan registri npm pribadi ke produk kami (gratis) ProGet
Karl Harnagy
2
Seperti disebutkan di bawah, Nexus sekarang mendukung repo yang di-host dan proxy npm.
Zac Thompson
8
Selama bertahun-tahun telah ada banyak pilihan yang tersedia. Siapa pun yang kembali ke ini harus membaca semua jawaban dan bukan hanya yang saya terima pada 2011.
adam

Jawaban:

100

Saya tidak berpikir ada cara mudah untuk melakukan ini.

Sebuah melihat dokumentasi NPM memberitahu kita, bahwa adalah mungkin:

Bisakah saya menjalankan registry pribadi saya sendiri?

Iya!

Cara termudah adalah dengan mereplikasi basis data sofa, dan menggunakan dokumen desain yang sama (atau serupa) untuk mengimplementasikan API.

Jika Anda mengatur replikasi berkelanjutan dari CouchDB resmi, dan kemudian menetapkan CouchDB internal Anda sebagai konfigurasi registri, maka Anda akan dapat membaca paket apa pun yang diterbitkan, selain paket pribadi Anda, dan secara default hanya akan mempublikasikan secara internal. Jika kemudian Anda ingin menerbitkan paket untuk dilihat seluruh dunia, Anda bisa langsung mengesampingkan --registrykonfigurasi untuk perintah itu.

Ada juga tutorial yang sangat baik tentang cara membuat repositori npm pribadi di blog jam.

EDIT (2017-02-26):

Tidak benar-benar baru, tetapi sekarang ada paket berbayar untuk meng-host paket pribadi di NPM.

Selama bertahun-tahun, NPM telah menjadi faktor bagi banyak perusahaan non-Node.js, melalui ekosistem frontend besar yang dibangun di atas NPM. Jika perusahaan Anda sudah menjalankan Sonatype Nexus untuk hosting proyek Java secara internal, Anda juga dapat menggunakannya untuk hosting paket NPM internal.

Pilihan lain termasuk JFrog Artifactory dan Inedo ProGet , tapi saya belum menggunakannya.

pvorb
sumber
201

https://github.com/isaacs/npmjs.org/ : Dalam npm versi v1.0.26 Anda dapat menentukan url repositori git pribadi sebagai ketergantungan pada file package.json Anda. Saya belum menggunakannya tetapi akan sangat menyukai umpan balik. Inilah yang perlu Anda lakukan:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

Posting berikut berbicara tentang ini: Debuggable: Private npm modules

ebdr
sumber
3
Itu fitur yang hebat, tetapi saya menerima pvorb's karena saya bertanya tentang hosting repo NPM keseluruhan, a la repo internal Maven
adam
2
Catatan: NPM saat ini tidak mendukung menentukan rentang versi dengan URL git ini (mis. 1.2.x atau ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, Anda dapat menentukan tag (v0.0.1), bukan?
mcha
Ya, Anda dapat melakukan tag yang tepat.
Clay
Apakah ada cara untuk menggunakan kunci penggunaan GitHub untuk mengotentikasi ke repo pribadi?
sunknudsen
91

Ada paket npm yang mudah digunakan untuk melakukan ini. https://www.npmjs.org/package/sinopia

Singkatnya, Sinopia adalah server repositori private / caching npm yang dapat Anda atur dengan konfigurasi nol.

Sinopia dapat digunakan untuk:

  • menerbitkan paket pribadi sendiri tanpa memaparkannya kepada publik
  • cache hanya paket publik yang digunakan (tidak perlu harus mereplikasi seluruh pendaftaran publik)
  • menimpa paket publik dengan versi modifikasi yang telah diproduksi secara internal.
TiQP
sumber
13
Sinopia tampaknya tidak lagi dipertahankan. Komit terakhir adalah lebih dari 8 bulan yang lalu pada hari ini (7 Maret 2016). Itu terlihat hebat dan bekerja dengan baik tetapi berhati-hati di sekitar rawatan.
Ray Booysen
45
Lihat verdaccio . Garpu yang dipelihara secara aktif: github.com/verdaccio/verdaccio
Rotareti
1
apakah verdaccio mendukung konfigurasi "khusus pribadi", di mana ia tidak akan meminta registri publik?
MarkusSchaber
1
@MarkusSchaber Anda dapat menonaktifkan proxy ke pendaftar lain. Ini bekerja dalam mode offline walaupun proxy mencoba mengakses ke jaringan.
Juan Picado
1
Saya benar-benar menganggap Verdaccio layak mendapatkan jawabannya sendiri hari ini stackoverflow.com/a/50815174/336753 Saya bahkan tidak memperhatikan komentar di sini terlebih dahulu.
kub1x
40

Verdaccio adalah apa yang saya cari dan layak untuk jawabannya sendiri;) Ini adalah garpu Sinopia yang dikelola secara aktif (jawaban yang sangat tervotifikasi di sini ). Ini adalah registri npm sebagai paket npm , dan dapat ditemukan

di sini: https://github.com/verdaccio/verdaccio , di
sini: https://www.verdaccio.org , di
sini:, pnpm i -g verdaccioatau di
sini:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
sumber
2
ini! terima kasih -> buruh pelabuhan run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@ mwm Terima kasih. Menambahkan versi buruh pelabuhan ke daftar.
kub1x
28

Pada 14 April (2015), npm private module diperkenalkan.

Saat Anda membayar modul pribadi, Anda dapat:

  • Host paket pribadi sebanyak yang Anda inginkan
  • Berikan akses baca atau baca-tulis untuk paket-paket itu kepada pengguna berbayar lainnya
  • Instal dan gunakan paket apa pun yang telah diberikan akses oleh pengguna berbayar kepada Anda
  • Berkolaborasi pada paket apa pun yang telah diberikan akses oleh pengguna berbayar lainnya kepada Anda

Tentu saja tidak gratis - saat ini $ 7 sebulan, per pengguna.

Dan ini masih merupakan layanan yang cukup baru. Misalnya, dukungan untuk akun organisasi tidak ada (pada Juni 2015):

Saat ini, paket pribadi hanya tersedia untuk pengguna individu, tetapi dukungan untuk akun organisasi akan segera hadir. Sementara itu, jangan ragu untuk membuat pengguna untuk organisasi Anda, dan kami dapat memutakhirkannya ke organisasi ketika dukungan ada di sini.

Jadi sementara tidak sempurna, ini adalah resmi solusi npm untuk memelihara paket pribadi, dan itu sendiri membuatnya layak disebut.

MEMPERBARUI

Paket Pribadi Npm sekarang tersedia, dengan paket untuk masing-masing pengguna dan organisasi :

  • Paket publik & pribadi dalam jumlah tidak terbatas
  • $ 7 / bulan / pengembang
  • Termasuk satu nama ruang lingkup, berdasarkan nama organisasi
  • Publikasikan dan kontrol akses ke @ org-name / foo

(disclaimer: bahkan tidak berafiliasi dengan npm, Inc. )

bardzusny
sumber
20

Manajer repositori dengan dukungan untuk pendaftar npm pribadi:

Abel Pastur
sumber
4
Hanya versi berbayar yang mendukung repositori npm; versi gratisnya tidak.
Boon
12
Versi gratis dari Sonatype Nexus 3.0, pada kenyataannya, mendukung repo npm (bersama dengan repo bower dan docker).
n8n8baby
10

Saya kira utas ini membutuhkan pembaruan. Jika Anda melihat salah satu pendaftar npm yang tersedia, mereka sangat berat dan mereka membutuhkan couchdb. Gemfurry dan lainnya perlu Anda bayarkan dari repo publik. Beberapa shadow-npm seperti npm tidak memiliki commit baru-baru ini .

Kemudian, kami menemukan Reggie . Ini memiliki aktivitas komit yang baik, sangat mudah untuk diinstal dan digunakan dan memiliki dukungan komunitas yang cukup bagus . Ini sangat ringan dan Anda tidak harus berurusan dengan couchdb, dll.

Pradeep Mahdevu
sumber
9

Maafkan saya jika saya tidak mengerti pertanyaan Anda dengan baik, tapi inilah jawaban saya:

Anda dapat membuat modul npm pribadi dan menggunakan perintah normal npm untuk menginstalnya. Sebagian besar pengguna node.js menggunakan git sebagai repositori mereka, tetapi Anda dapat menggunakan repositori apa pun yang bekerja untuk Anda.

  1. Dalam proyek Anda, Anda akan menginginkan kerangka paket NPM. Sebagian besar modul simpul memiliki repositori git di mana Anda dapat melihat bagaimana mereka berintegrasi dengan NPM (file package.json, saya percaya merupakan bagian dari ini dan situs web NPM menunjukkan kepada Anda cara membuat paket nPM)
  2. Gunakan sesuatu yang mirip dengan Membuat untuk membuat dan tarball paket Anda agar tersedia dari internet atau jaringan Anda untuk panggung itu untuk npm menginstal unduhan.
  3. Setelah paket Anda dibuat, maka gunakan

    npm instal * tarball_url *

EhevuTov
sumber
5
Anda tidak mendapatkan pertanyaannya, tetapi jawabannya sangat berguna bagi saya! :)
Eduardo Costa
7

Ini adalah cara termudah yang saya tahu - tuan rumah dalam awan dengan Gemfury NPM swasta registry.

Ini gratis dan Anda dapat masuk dengan akun Github Anda. Ini akan menghemat banyak waktu, dibandingkan dengan mengatur database Anda sendiri.

alex urdea
sumber
itu tidak gratis.
I.Tyger
6

kami menggunakan Nexus Sonatype, versinya adalah Nexus Repository ManagerOSS 3.6.1-02. Dan saya yakin itu mendukung repositori pribadi NPM dan cache paket.

masukkan deskripsi gambar di sini

Xin Meng
sumber
5

Agak terlambat ke pesta, tetapi NodeJS (pada ~ 14 Nov saya kira) mendukung repositori NPM perusahaan - Anda dapat mengetahui lebih lanjut di situs resmi mereka .

Dari pandangan sepintas akan terlihat bahwa npmE memungkinkan mirror-through mirroring dari repositori NPM - yaitu, ia akan mencari paket dalam repositori NPM yang nyata jika tidak dapat menemukan satu di yang internal Anda. Tampaknya sangat berguna!

npm Enterprise adalah solusi di tempat untuk berbagi dan mendistribusikan modul JavaScript dengan aman di organisasi Anda, dari tim yang mengelola npm dan registri npm publik. Ini dirancang untuk tim yang membutuhkan:

berbagi internal yang mudah dari modul pribadi kontrol yang lebih baik terhadap pengembangan dan penerapan alur kerja keamanan yang lebih ketat di sekitar penerapan modul sumber terbuka kepatuhan dengan persyaratan hukum untuk meng-host kode di tempat npmE adalah pribadi npm

npmE adalah registri npm yang bekerja dengan klien npm standar yang sama yang sudah Anda gunakan, tetapi menyediakan fitur yang dibutuhkan oleh organisasi yang lebih besar yang sekarang dengan antusias mengadopsi node. Ini dibangun oleh npm, Inc., sponsor dari proyek open source npm dan host dari registri npm publik.

Sayangnya, ini tidak gratis. Anda bisa mendapatkan percobaan, tetapi ini adalah perangkat lunak komersial. Ini adalah bagian yang tidak terlalu bagus untuk pengembang solo, tetapi jika Anda adalah pengembang solo, Anda memiliki GitHub :-)

Dan Pantry
sumber
3

Posting ini berbicara tentang cara mengatur registri pribadi

  • pastikan couchdb diinstal di sistem Anda
  • Replikasi npmjs.org menggunakan perintah berikut

    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"

Perhatikan ada "continuous":truedalam perintah, ini menggunakan _changes API CouchDB dan akan menarik perubahan baru ketika API ini diberitahukan.

Jika Anda ingin menghentikan replikasi ini, Anda dapat dengan mudah menambahkan "cancel":true. Maka skrip akan menjadi

    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"

Kemudian pergi ke readme npmjs.org untuk menginstal npm (pastikan nodejsdan gitdiinstal). Pukulan adalah semua langkahnya

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 
Nickleefly
sumber
1
Sayangnya, url isaacs.iriscouch.com/registry sudah mati sekarang. Saya mencoba mengubahnya ke skimdb.npmjs.com/registry , yang tampaknya bekerja pada awalnya, tetapi hanya mereplikasi indeks registri dan bukan tarball ...
fuzzyTew
The couchapp negara readme yang couchapp sekarang agak usang, tetapi juga mengatakan bahwa cara saat ini untuk cermin seluruh registri adalah untuk penggunaan NPM-fullfat-registry
fuzzyTew
Saya akhirnya menggunakan static-registry untuk ini, yang tidak seperti solusi couchdb tidak memerlukan konfigurasi sama sekali.
fuzzyTew