Git'ten belirli bir sürümde npm kurulumu


181

Node.js için özel tutmak istediğim bir modül yazdım. Satırı ekleyebileceğimi biliyorum:

"private": "true"

için package.jsondosyanın, ve ben de biliyoruz ki elimden npm installbir dosya sistemi yolu veya GitHub'dan dahil git deposu, bir bağlantı kullanarak bu modülü.

Ben de böyle bir dosya sistemi yolu veya içine git repo için bir bağlantı koyabilirsiniz biliyorum package.json, böylece dependenciesparçası biraz böyle görünebilir:

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

Şimdi istediğim en son sürüme değil, belirli bir sürüme bağlanmak. Bildiğim tek olasılık, kimliğini kullanarak belirli bir taahhütle bağlantı kurmaktır. Ancak bu, bir sürüm numarası kullanmaktan daha az okunabilir ve daha kötü korunabilir 0.3.1.

Yani sorum şu: Böyle bir sürüm numarası belirtmek ve npm bu sürümü içeren en son taahhüt için git deposunda arama yapmak mümkün mü?

Değilse, projelerinizde bu sorunu nasıl çözersiniz? Taahhüt kimlikleriyle mi yaşıyorsun yoksa buna daha iyi bir çözüm var mı?

Yanıtlar:


193

Bir bağımlılık edinilebilir olmak zorunda registrytarafından sadece kurulacak bir belirterek versiontanımlayıcısı .

Kesinlikle olabilir oluşturmak ve kendi kayıt defteri kullanmak yerine registry.npmjs.orgsizin projeleri halka paylaşılmamalıdır eğer.

Ancak, bir kayıt defterinde değilse, URL veya Git URL'sine başvurulması gerekir . Git URL'si olan bir sürüm belirtmek için <commit-ish>, sonuna URL parçası olarak etiket gibi uygun bir içerik ekleyin .

Örnek 0.3.1: adlı bir etiket için :

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

Not : Yukarıdaki snippet, temel URL'yi soruda yayınlananla aynı olarak gösterir.

Kesilen kısım ( ...) doldurulmalıdır:

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

SSH erişimi olmadığında farklı bir adres biçimi gerekli olacaktır:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

İşletim sisteminize bağlı olarak link, Github'dan klonladığınız başka bir klasördeki bağımlılığa da sahip olabilirsiniz.


1
Bu yazıdaki bazı bağlantıların modası geçmiş gibi görünüyor, çünkü bunun yerine 404 sayfaya yönlendiriyorlar. Yazık ki, bunun bir kısmı uzun süredir aradığım bilgiler.
MvG

5
Belirli bir sürümü etiketledim git tag -a "1.0.0"ve ittim git push --tags, sonra bağımlılığın #v1.0.0sonuna ekledim git+ssh. Ama npm updatehiçbir şey olmuyor.
loretoparisi

3
@loretoparisi Üzgünüm. Eklemenin vgerekli olduğunu öne sürmek istememiştim . Sonra #, parça etiketin tam adı (ya da diğer uyumlu olmalıdır commitsh ) - senin durumunda, #1.0.0.
Jonathan Lonowski

Temmuz 2016 itibariyle, kendi kayıtlarını barındırmak, couchdb'den mikro hizmetlere geçtikçe daha karmaşık hale geldi
Yan Foto

3
Artık yapabilirsiniz npm i {owner}/{project}#{tag}veya eklenti "{library}": "github:{owner}/{project}#{tag}"kullanmak yerine package.json için git@github.comyagit://github.com
Mike W

238

Kabul edilen cevap benim için işe yaramadı. İşte github'dan bir paket çekmek için yaptığım şey:

npm install --save "git://github.com/username/package.git#commit"

Veya package.json üzerinde manuel olarak eklemek:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}

41
Http / https kullanıyorsanız, "git +" önekini "package": "git+https://github.com/username/package.git#commit"
eklediğinizden

4
Bu "npm install" kadar çalıştı ama benim uygulama çalıştırmak için çalışırken ('mymodule') bu paketi bulmak için başarısız oldu. Paket aynı ada sahip node_modules dizininde olmasına rağmen.
Derrick

Oh, söz konusu modül istediğim belirli bir taahhüt ile inşa içermiyordu, bu yüzden aynı probleminiz varsa manuel olarak inşa etmeniz gerekebilir.
Derrick

1
Ayrıca #taggenellikle bir sürüm numarasını işaret eden kullanabilirsiniz
deltree

1
@surjikal git ile sürüm numaralarını kullanabilmeniz için önce bir sürümü etiketlemeniz gerekir. Örneğin git tag -a v1.0.1 && git push --tag && git push@Jonathan Lonowski'nin bir yorumda söylediği gibi.
dotnetCarpenter

80

Sürüme göre bir etiket veya sürüm demek istiyorsanız, github bunlar için indirme bağlantıları sağlar. Örneğin, getirme 0.3.2 sürümünü (npm'de kullanılamıyor) yüklemek istiyorsanız , o zaman benim package.jsonaltına eklerim dependencies:

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

İşleme karma yaklaşımı ile karşılaştırıldığında tek dezavantaj, karma değerinin değiştirilmiş kodu temsil etmemesinin garanti edilmesidir, oysa bir etiket değiştirilebilir. Neyse ki bu nadiren olur.

Güncelleme:

Bugünlerde kullandığım yaklaşım GitHub tarafından sunulan bir bağımlılık için kompakt gösterimdir:

"dependencies": {
  "package": "github:username/package#commit"
}

Taahhüt, etiket gibi herhangi bir şey olabilir. GitHub söz konusu olduğunda github:, varsayılan değer olduğu için ilk harfi bile bırakabilirsiniz .


Arşiv modu da taahhütler için çalışır; ör., `` iplik ekleme github.com/github/fetch/archive/… `
bvj

En temiz çözüm.
Charley Bodkin

8

Yukarıdaki @ qubyte için örnek yorumum kesildi, bu yüzden okunması daha kolay bir şey ...

@Surjikal yukarıda açıklanan yöntem şube taahhütleri için çalışıyor, ancak dahil etmeye çalıştığım bir ağaç taahhüdü için işe yaramadı .


Arşiv modu da taahhütler için çalışır. Örneğin, @ a2fbf83 getir

npm :

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

iplik :

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

biçim :

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


İşte modu gerektiren ağaç taahhüdü /archive/:

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

ilgili vuex taahhüdü için


8

Bu komut npm paketini username/packagebelirli git commit'den kurar :

npm install https://github.com/username/package#3d0a21cc

İşte 3d0a21cckesin karma ilk 8 karakter.


3

Burada çalışırken karşılaştığım bir sorunu açıklıyorum npm install- paket görünmüyor node_modules.

Sorun, kurulu paketin namedeğerinin package.jsoniçe aktarılan paketin (projemin anahtarı) adından farklı olmasıydı package.json.

Senin yüklü proje adı Yani eğer some-package(onun ad değeri package.jsondaha sonra) package.json: Proje yazma "some-package": "owner/some-repo#tag".


Keşke cevabını daha erken bulsaydım 😓 - Sadece çözdüm, aynı problem beni bir süreliğine mücadele ediyor; ve bu namegereksinim internette sık sık belirtilmiyor .. (en azından ben buna katlanabileceğim için değil).
Kamafeather

"Paket bağımlılıklarınızı tam kapsamlı paket adını belirterek package.json dosyasına ekleyin." - Gerçekten vurgulamamak: help.github.com/en/articles/…
Kamafeather

npm install --save git+https://<remote-github-repo-url>İleride bu sorunla karşılaşmamak için oldukça güvenli bir yol olduğunu öğrendim .
Kamafeather

2

Tfjs-core'un iki sürümünü çalıştırmam gerekiyordu ve her ikisinin de kurulduktan sonra inşa edilmesi gerektiğini buldum.

package.json:

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

Sonra:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

Ve son olarak, kütüphaneleri kullanmak için:

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';

Bu harika çalıştı ama kesinlikle #hoodrat


1
Teşekkür ederim, akla gelebilecek her şekilde ithal etmeye çalışıyorum. Doğrudan dosyadan içe aktarmam gerektiğini fark etmek için snippet'inizi görmek zorunda kaldım.
Victor Ivens

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.