Bagaimana cara menginstal modul NPM pribadi tanpa registrasi saya sendiri?

329

Saya telah mengambil beberapa kode bersama dan memasukkannya ke dalam modul NPM, yang saya tidak ingin mengunggah ke registri pusat. Pertanyaannya adalah, bagaimana cara menginstalnya dari proyek lain?

Cara yang jelas mungkin untuk mengatur registri NPM saya sendiri, tetapi menurut dokumentasi, itu melibatkan banyak kerumitan.

Bisakah saya menginstal modul NPM yang berada di sistem file lokal, atau bahkan mungkin dari git?

npm install --from-git git@server:project
futlib
sumber

Jawaban:

263
cd somedir
npm install .

atau

npm install path/to/somedir

somedirharus mengandung package.jsondi dalamnya.

Ia tahu tentang git juga:

npm install git://github.com/visionmedia/express.git
mihai
sumber
4
Solusi path / to / somedir jenis bekerja, tapi kemudian itu agak mengerikan karena semua pernyataan yang diperlukan kemudian harus menyertakan jalan relatif atau absolut itu. Harap perbaiki saya jika saya melakukan sesuatu yang salah ...
Luke Bayes
3
@ Lukas ya, Anda salah. Setelah npm installsemua file disalin ke direktori proyek Anda. Jadi jalur dalam requirepernyataan akan relatif hanya ke direktori proyek Anda.
mihai
4
Saya bingung dengan bagian atas dan satu-satunya alasan saya belum menguji ini sendiri adalah karena saya masih belajar dan tidak memiliki modul pribadi untuk dikerjakan. Pokoknya, dengan mengubah direktori Anda ke tempat modul dan kemudian menelepon installbukankah itu hanya menginstal di sana dan bukan untuk proyek yang ingin Anda gunakan?
Adam Beck
11
Catatan samping: (a) saat menggunakan repositori git, Anda dapat menentukan cabang / komit / tag dengan menambahkan a #<ref>ke akhir url git, mis git://github.com/visionmedia/express.git#v0.0.1; (B) Agar aman tambahkan "private": trueke package.json dari repo pribadi Anda. Ini akan memastikan npm tidak akan pernah membiarkan Anda secara tidak sengaja mempublikasikan saus rahasia Anda ke registri npm resmi. (menurut debuggable.com/posts/… )
Rafael Xavier
9
FYI jika Anda melayani git Anda melalui http, Anda harus melakukannya npm i git+http://all/the/things.gitmeskipun git clone http://all/the/things.gitberfungsi dengan baik
slf
527

Dalam modul npm pribadi Anda, tambahkan

"private": true 

ke package.json Anda

Kemudian untuk referensi modul pribadi di modul lain, gunakan ini di package.json Anda

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
250R
sumber
59
Ini adalah nyata jawaban yang benar jika Anda ingin package.json Anda untuk mempertahankan daftar repo ketergantungan pribadi, yang adalah Good Thing (tm) yang seharusnya Anda lakukan.
6
Dalam contoh itu merujuk tag tertentu, tetapi jika Anda tidak memilikinya maka secara default akan dikuasai. (lihat git-scm.com/book/en/Git-Basics-Tagging )
250R
4
Saya tidak mengerti bagaimana baris perintah ini dapat mengunduh kode dari repo github pribadi jika saya tidak memasok kredensial saya! Jadi bagaimana saya bisa melewati kredensial github saya?
Renato Gama
28
Perhatikan bahwa "private": truebagian itu tidak perlu, tetapi itu akan membantu mencegah repo pribadi Anda dari tidak sengaja dipublikasikan ke registri npm publik.
evanrmurphy
2
NPM mencari beberapa variabel lingkungan juga. Dari manual di npm install <git remote url>bagian ini, ada opsi seperti GIT_ASKPASSdan GIT_SSH. Contoh penggunaan untuk memilih kunci selain dari id_rsa default:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
Jasmine Hegman
62

Bisakah saya menginstal paket NPM yang berada di sistem file lokal, atau bahkan mungkin dari git?

Ya kamu bisa! Dari docs https://docs.npmjs.com/cli/install

Paket adalah:

  • a) folder yang berisi program yang dijelaskan oleh file package.json
  • b) tarball gzip yang mengandung (a)
  • c) url yang memutuskan untuk (b)
  • d) a <name>@<version>yang diterbitkan pada registri dengan (c)
  • e) a <name>@<tag>yang menunjuk ke (d)
  • f) a <name>yang memiliki tag "terbaru" yang memuaskan (e)
  • g) a <git remote url>yang memutuskan untuk (b)

Bukankah npm brilian?

Kolonel Panic
sumber
2
Perhatikan bahwa jika Anda memilih opsi b), itu sebenarnya harus berupa tarball yang di-gzip , arsip zip biasa tidak akan melakukannya. Yaitu jika Anda membuat paket dengan tar -czf my-package.tar.gz dist( dengan asumsi distfolder Anda juga memiliki package.jsonfile yang tepat di dalamnya), maka Anda dapat npm install ../my-lib/my-package.tar.gzdari proyek Anda yang lain.
Dániel Kis-Nagy
48

Perbarui Januari 2016

Selain jawaban lain , kadang-kadang ada skenario di mana Anda ingin memiliki modul pribadi yang tersedia dalam konteks tim.

Baik Github dan Bitbucket mendukung konsep menghasilkan Kunci API tim . Kunci API ini dapat digunakan sebagai kata sandi untuk melakukan permintaan API sebagai tim ini.

Dalam modul npm pribadi Anda, tambahkan

"private": true 

ke package.json Anda

Kemudian untuk referensi modul pribadi di modul lain, gunakan ini di package.json Anda

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

di mana nama tim = myteamname , dan API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Di sini saya referensi repo bitbucket, tetapi hampir identik menggunakan github juga.

Akhirnya, sebagai alternatif, jika Anda benar-benar tidak keberatan membayar $ 7 per bulan (pada saat penulisan) maka Anda sekarang dapat memiliki modul NPM pribadi di luar kotak.

arcseldon
sumber
Bisakah Anda menggunakan ini jika Anda ingin memiliki modul global?
PI.
Saya rasa ini tidak berhasil. Remote dan repositori tidak ditemukan. Ada ide?
Thomas Bormans
@ThomasBormans - masih mengalami masalah? Silakan tempel (ganti nama tim Anda / kunci api) apa yang Anda miliki sebagai baris Anda di bagian dependensi package.json Anda - sesuai instruksi di atas. Saya telah menemukan ini bekerja dengan baik untuk repositori pribadi github dan bitbucket. Yang kamu gunakan
arcseldon
@arcseldon "name": "git + key: [email protected]/user/repo.git " mengembalikan EISDIR: operasi ilegal pada direktori, baca . Dan "nama": "git + pengguna: [email protected]/repo.git " mengembalikan beberapa kesalahan termasuk kata-kata ini jauh: Tidak Ditemukan, fatal: repositori, Perintah gagal: git klon . Ada ide?
Thomas Bormans
Cobalah untuk mengikuti format "tepat" yang saya berikan dalam jawaban: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git Bagaimana Anda menghasilkan kunci API? Sudahkah Anda memeriksa ulang? itu benar dalam pengaturan bitbucket Anda ... maaf untuk menanyakan yang sudah jelas, tetapi saya memiliki kepercayaan diri 100% ini seharusnya bekerja
arcseldon
30

FWIW: Saya punya masalah dengan semua jawaban ini ketika berhadapan dengan repositori organisasi swasta.

Berikut ini bekerja untuk saya:

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Sebagai contoh:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

Saya tidak sepenuhnya yakin mengapa jawaban lain tidak berhasil untuk saya dalam kasus ini, karena itulah yang saya coba pertama kali sebelum saya menekan Google dan menemukan jawaban ini. Dan jawaban lainnya adalah apa yang telah saya lakukan di masa lalu.

Semoga ini bisa membantu orang lain.

Ben Lesh
sumber
2
Bisakah Anda menggunakan subfolder dari git repo?
Chris
Bekerja untuk saya di 2019! Tapi saya harus memastikan git memiliki kredensial untuk mengakses akun itu. (Mis. Uji git klon dua kali dengan https://, dan pastikan kata sandi tidak diperlukan pada menjalankan kedua. Maka Anda baik untuk pergi!)
joeytwiddle
9

Saya memiliki masalah yang sama, dan setelah beberapa pencarian, saya menemukan Reggie ( https://github.com/mbrevoort/node-reggie ). Terlihat cukup solid. Hal ini memungkinkan untuk penerbitan modul NPM yang ringan ke server pribadi. Tidak sempurna (tidak ada otentikasi saat instalasi), dan masih sangat muda, tapi saya mengujinya secara lokal, dan tampaknya melakukan apa yang seharusnya dilakukan.

Itu adalah ... (dan ini hanya dari dokumen mereka)

npm install -g reggie
reggie-server -d ~/.reggie

kemudian masukkan ke direktori modul Anda dan ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

akhirnya, Anda dapat menginstal paket dari reggie hanya dengan menggunakan url itu baik dalam perintah instal langsung npm, atau dari dalam package.json ... seperti itu

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

atau..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}
bwest87
sumber
7

Struktur kode Anda dengan cara yang dapat diakses seperti di bawah ini. Jika ini mungkin bagi Anda.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modul \ DataModule \ package.json

Di dalam MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Anda mungkin perlu memperbarui package.json sebagai:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Ini berhasil untuk situasi saya.

dynamiclynk
sumber
5

Npm sekarang menyediakan modul host pribadi tanpa batas untuk $ 7 / pengguna / bulan yang digunakan seperti itu

cd private-project
npm login

dalam paket json Anda "name": " @username/private-project"

npm publish

kemudian membutuhkan proyek Anda:

cd ../new-project
npm install --save @username/private-project
roo2
sumber
1
Apakah ini memerlukan langkah login sisi klien?
Aidan Hoolachan
Apa alternatif untuk ini? Misalnya, jika Anda ingin meng-host "paket" Anda di S3 dan tarik dari sana.
Con Antonakos
4

Dimulai dengan jawaban arcseldon , saya menemukan bahwa nama tim diperlukan di URL seperti:

npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"

Dan perhatikan bahwa kunci API hanya tersedia untuk tim, bukan pengguna individual.

Kramer
sumber
2

Konfigurasi untuk menginstal dari repositori Github publik, bahkan jika mesin di bawah firewall:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}
Alex Belozerov
sumber
2

Saya menggunakan yang berikut ini dengan repositori github pribadi:

npm install github:mygithubuser/myproject
Lars
sumber
2

Inilah yang saya cari :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://[email protected]/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev
Yesaya
sumber
2

Anda dapat menggunakan Verdaccio untuk tujuan ini yang merupakan registry proxy npm pribadi yang ringan yang dibangun di Node.js. Juga gratis dan open-source. Dengan menggunakan Verdaccio itu tidak melibatkan banyak kerumitan sebagai registri npm pribadi biasa.

Anda dapat menemukan informasi terperinci tentang cara menginstal dan menjalankannya di situs web mereka, tetapi berikut adalah langkah-langkahnya:

Itu membutuhkan node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Ini juga memiliki buruh pelabuhan sehingga Anda dapat dengan mudah menerbitkannya ke buruh pelabuhan yang tersedia untuk umum dan voila Anda memiliki repositori npm pribadi yang dapat didistribusikan ke orang lain dengan cara seperti yang Anda konfigurasikan!

Dominik
sumber
0

Sangat sederhana -

npm config set registry https://path-to-your-registry/

Ini sebenarnya mengatur registry = "https://path-to-your-registry"baris ini/Users/<ur-machine-user-name>/.npmrc

Semua nilai yang telah Anda tetapkan secara eksplisit atau telah ditetapkan secara default dapat dilihat oleh - npm config list

lemah
sumber