Kendi kayıt defterim olmadan özel bir NPM modülü nasıl kurulur?


329

Bazı paylaşılan kod aldım ve bir NPM modülüne koydum, merkezi kayıt defterine yüklemek istemiyorum. Soru şu: Diğer projelerden nasıl kurabilirim?

Bariz yol muhtemelen kendi NPM kayıt defterimi kurmaktır, ancak belgelere göre, bu çok fazla zorluk gerektirir.

Sadece yerel dosya sisteminde, hatta git'te oturan bir NPM modülünü kurabilir miyim?

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

Yanıtlar:


263
cd somedir
npm install .

veya

npm install path/to/somedir

somediriçerisini içermelidir package.json.

Git'i de biliyor:

npm install git://github.com/visionmedia/express.git

4
/ To / somedir yolu yolu işe yarıyor, ama o zaman bu çok kötü çünkü tüm zorunlu ifadeler bu göreceli veya mutlak yolu içermelidir. Yanlış bir şey yapıyorsam lütfen beni düzeltin ...
Luke Bayes

3
@ Evet evet, yanılıyorsun. npm installTüm dosyalar proje dizininize kopyalandıktan sonra . Dolayısıyla, requireifadelerdeki yollar yalnızca proje dizininize göreli olacaktır.
mihai

4
Üst kısımdan kafam karıştı ve bunu kendim test etmememin tek nedeni hala öğreniyorum ve üzerinde çalışacak özel bir modülüm yok. Her neyse, dizininizi modülün bulunduğu yere değiştirerek ve sonra çağırmak install, onu kullanmak istediğiniz proje için değil, sadece oraya yüklemez mi?
Adam Beck

11
Yan not: (a) git repos kullanırken #<ref>, git url'sinin sonuna a ekleyerek bir şube / taahhüt / etiket belirtebilirsiniz git://github.com/visionmedia/express.git#v0.0.1; (b) Güvenli olmak "private": trueiçin özel depolarınızın package.json dosyasını ekleyin . Bu, npm'nin yanlışlıkla gizli sosunuzu resmi npm kayıt defterine yayınlamanıza izin vermeyeceğinden emin olacaktır. ( debuggable.com/posts/… 'a göre )
Rafael Xavier

9
FYI http üzerinden git up hizmet veriyorsanız, iyi çalışıyor npm i git+http://all/the/things.gitolsa bile gerekirgit clone http://all/the/things.git
slf

527

Senin içinde özel npm modülleri eklenti

"private": true 

paketinize. json

Ardından başka bir modüldeki özel modüle başvurmak için bunu paketinizde kullanın.

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
Paketinizin.json'un özel repo bağımlılık listesini tutmasını istiyorsanız gerçek doğru yanıt budur, ki yapmanız gereken iyi bir şeydir (tm).

6
Örnekte belirli bir etikete atıfta bulunuyor, ancak etiketiniz yoksa ana olarak varsayılan olacaktır. (bkz. git-scm.com/book/tr/Git-Basics-Tagging )
250R

4
Kimlik bilgilerimi desteklemiyorsam bu komut satırının özel bir github deposundan nasıl kod indirebileceğini anlamıyorum! Peki github kimlik bilgilerimi nasıl iletebilirim?
Renato Gama

28
"private": trueParçanın gerekli olmadığını unutmayın , ancak özel deponuzun yanlışlıkla genel npm kayıt defterine yayınlanmasını önlemeye yardımcı olacaktır.
evanrmurphy

2
npm de birkaç ortam değişkeni arar. Gönderen kılavuzda yer npm install <git remote url>bölümünde, gibi seçenekler vardır GIT_ASKPASSve GIT_SSHvarsayılan id_rsa yerine başka bir anahtarın seçmek için .an örnek kullanımı:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
Yasemin Hegman

62

Sadece yerel dosya sisteminde, hatta git'te oturan bir NPM paketi yükleyebilir miyim?

Evet yapabilirsin! Https://docs.npmjs.com/cli/install dokümanlarından

Bir paket:

  • a) package.json dosyası tarafından tanımlanan bir programı içeren klasör
  • b) (a) içeren bir sıkıştırılmış tarball
  • c) (b) 'ye çözümlenen bir url
  • d) <name>@<version>(c) ile kayıt defterinde yayınlanan a
  • e) <name>@<tag>(d) 'ye işaret eden a
  • f) a <name> tatmin edici bir "son" etikete sahip bir (e)
  • g) <git remote url>(b) 'ye çözümlenen a

Npm parlak değil mi?


2
Seçenek b) için giderseniz, aslında gzip bir tarball olması gerektiğini unutmayın , sadece bir zip arşivi bunu yapmayacaktır. Yani paketinizi tar -czf my-package.tar.gz dist( distklasörünüzde de uygun bir package.jsondosya olduğunu varsayarak ) oluşturursanız, npm install ../my-lib/my-package.tar.gzdiğer projenizden de yapabilirsiniz.
Dániel Kis-Nagy

48

Güncelleme Ocak 2016

Diğer cevaplara ek olarak , bazen takım modüllerinde özel modüllerin olmasını istediğiniz senaryo vardır.

Her ikisi de Github hem de Bitbucket , bir ekip API Anahtarı oluşturma kavramını destekler . Bu API anahtarı, bu ekip olarak API isteklerini gerçekleştirmek için şifre olarak kullanılabilir .

Senin içinde özel npm modülleri eklenti

"private": true 

paketinize . json

Ardından başka bir modüldeki özel modüle başvurmak için bunu paketinizde kullanın.

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

burada takım adı = myteamname ve API Anahtarı = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Burada bir bitbucket repo referans, ama github kullanarak neredeyse aynı.

Son olarak, alternatif olarak, gerçekten ayda 7 dolar ödemeyi düşünmüyorsanız (yazı olarak), artık özel NPM modüllerini kutudan çıkartabilirsiniz .


Global bir modülünüz varsa bunu kullanabilir misiniz?
PI.

Bu benim için işe yaramıyor korkuyorum. Hem uzaktan kumanda hem de depo bulunamadı. Herhangi bir fikir?
Thomas Bormans

@ThomasBormans - hala sorun mu yaşıyorsunuz? Lütfen paketinizin bağımlılıklar bölümüne satır olarak sahip olduklarınızı (takım adınızı / api anahtarınızı karıştırın) yapıştırın. Json - yukarıdaki talimatlara göre. Bu hem github hem de bitbucket özel depoları için iyi çalışıyor bulduk. Hangisini kullanıyorsun?
arcseldon

@arcseldon "name": "git + key: x-oauth-basic@bitbucket.org/user/repo.git " döndürür EISDIR: dizindeki geçersiz işlem, okuyun . Ve "name": "git + user: key@bitbucket.org/repo.git " şu kelimeler de dahil olmak üzere birçok hata döndürür : Bulunamadı, ölümcül: depo, Komut başarısız oldu: git clone . Herhangi bir fikir?
Thomas Bormans

Yanıtta verdiğim "tam" biçimi izlemeye çalışın: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git API anahtarını nasıl oluşturdunuz? bitbucket ayarlarınızda doğru ... bariz sormak için üzgünüm, ama bu çalışması gerekir yaklaşık% 100 güven var.
arcseldon

30

FWIW: Bir özel kuruluş deposuyla uğraşırken tüm bu cevaplarla ilgili sorunlar yaşadım.

Aşağıdakiler benim için çalıştı:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Örneğin:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Bu tek davada diğer cevapların benim için neden işe yaramadığından tam olarak emin değilim, çünkü ilk önce denediklerim bunlar Google'a çarpıp bu cevabı bulmadan önce . Ve diğer cevaplar geçmişte yaptığım şeyler.

Umarım bu başka birine yardımcı olur.


2
Git deposunun bir alt klasörünü kullanabilir misiniz?
Chris

2019'da benim için çalıştı! Ancak git'in bu hesaba erişmek için kimlik bilgilerine sahip olmasını sağlamak zorundaydım . (Örneğin git klonunu iki kez test edin https://ve ikinci çalıştırmada şifrenin gerekli olmadığından emin olun. O zaman gitmekte
fayda var

9

Aynı sorunu yaşadım ve etrafta arama yaptıktan sonra Reggie'yi buldum ( https://github.com/mbrevoort/node-reggie ). Oldukça sağlam görünüyor. NPM modüllerinin özel sunuculara hafifçe yayınlanmasını sağlar. Mükemmel değil (kurulumda kimlik doğrulaması yok) ve hala çok genç, ama yerel olarak test ettim ve yapması gereken şeyi yapıyor gibi görünüyor.

Bu ... (ve bu sadece dokümanlarından)

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

sonra modül dizininize cd ...

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

Son olarak, paketleri doğrudan bir npm yükleme komutunda veya bir paketin içinden kullanarak reggie'den yükleyebilirsiniz.

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

veya..

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

7

Kodunuzu aşağıdaki gibi erişilebilir bir şekilde yapılandırın. Bu sizin için mümkün ise.

  • NodeProjs \ Uygulamalar \ MainApp \ package.json

  • NodeProjs \ Modüller \ datamodule \ package.json

MainApp @ NodProjs \ Apps \ MainApp \ içinde

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

Package.json dosyasını şu şekilde güncellemeniz gerekebilir:

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

Bu benim durumum için işe yaradı.


5

Npm artık kullanıcı başına aylık $ 7 için sınırsız özel barındırılan modül sağlıyor

cd private-project
npm login

paketinizde json seti "name": " @username/private-project"

npm publish

sonra projenizi talep etmek için:

cd ../new-project
npm install --save @username/private-project

1
Bu, istemci tarafı giriş adımı gerektiriyor mu?
Aidan Hoolachan

Bunun alternatifi nedir? Örneğin, "paketinizi" S3'te barındırmak ve oradan çekmek istiyorsanız.
Con Antonakos

4

Arcseldon'ın cevabından başlayarak, URL'de takım adının gerekli olduğunu gördüm:

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

Ayrıca, API anahtarının tek tek kullanıcılar için değil, yalnızca ekip için kullanılabildiğini unutmayın.


2

Makine güvenlik duvarı altında olsa bile, genel Github deposundan yüklenecek şekilde yapılandırın:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

Özel github havuzuyla aşağıdakileri kullanıyorum:

npm install github:mygithubuser/myproject

2

Aradığım şey buydu :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

Verdaccio'yu kullanabilirsiniz Node.js. inşa hafif özel npm vekil kayıt olan bu amaç için Ayrıca ücretsiz ve açık kaynaklıdır. Verdaccio kullanarak, düz bir özel npm kayıt defteri olarak bu kadar güçlük içermez.

Web sitelerine nasıl yüklenip çalıştırılacağı hakkında ayrıntılı bilgi bulabilirsiniz , ancak aşağıdaki adımlar şunlardır:

Gerektirir 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

Ayrıca, bir kamu limanına sahiptir, böylece onu herkes tarafından kullanılabilir docker'ınıza kolayca yayınlayabilirsiniz ve voila, yapılandırdığınız gibi başkalarına dağıtılabilecek özel bir npm deposuna sahiptir!


0

Çok basit -

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

Aslında registry = "https://path-to-your-registry"bu satırı/Users/<ur-machine-user-name>/.npmrc

Açıkça ayarladığınız veya varsayılan olarak ayarladığınız tüm değerler şu şekilde görülebilir: npm config list

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.