npm çatallı github deposunun yüklenmesi ve oluşturulması


126

Bu tamamen yeni bir soru değil, ama uzun süredir etrafa bakıyorum ve bir çözüm bulmakta güçlük çekiyorum.

Angular-translate adlı açısal uygulamam için bir modül kullanıyorum. Bununla birlikte, her şeyin istediğim gibi çalışmasını sağlamak için kaynak kodda birkaç küçük değişiklik yapmak zorunda kaldım ve şimdi bu değişiklikleri devam ettirmek istiyorum npm install. Bir meslektaşım, kaynak kodun deposunu çatallamamı ve çatallı depomu bağımlılık olarak göstermemi önerdi, bu yollarla denedim, örneğin

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

İlki bana böyle yapısız bir dizin veriyor. Yalnızca bir package.json, .npmignore ve bazı markdown dosyaları

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

İkincisi npm installbana tam depoyu veriyor, ancak yine komutu kullandığımdaki gibi bir yapı alamıyorum npm install angular-translate. Yayın öncesi komut dosyasını çalıştırma konusunda bazı tartışmalar gördüm, ancak tüm modülleri yüklerken bunu nasıl yapacağımdan emin değilim. Ayrıca çatalı kendi modülüm olarak npm kayıt defterine yayınlamayı denedim, ancak yine bir derleme alamıyorum ve bunun yapılacak doğru şey olduğundan emin değilim ...

Konuyla ilgili bilgisizliğim için özür dilerim. Npm ile çok fazla deneyimim yok. Bu konuda biraz geri bildirim almak isterim. Bir paketin kaynak kodunda değişiklik yapılması gerektiğinde bu yeterince yaygın bir sorun olabilir gibi görünüyor? Belki daha iyi bir çözüm vardır? Yardımın için şimdiden teşekkür ederim.

Yanıtlar:


141

Deneyin npm install <ghusername>/<repoName>, <ghUsername>GitHub kullanıcı adınız (olmadan @) ve havuzun <repoName>adıdır. Bu, onu doğru bir şekilde kurmalıdır. Bağımlılığı .pdf dosyanıza kaydetmek için büyük olasılıkla install komutuyla birlikte --saveveya --save-devişaretini kullanmak isteyeceksiniz package.json.

Bu düzgün çalışmıyorsa, .npmignoredosyanızın içeriğini kontrol edin .

Kurulum komutu uzun sürerse panik yapmayın; git deposundan yükleme, npm kayıt defterinden yüklemeye göre daha yavaştır.


Düzenle:

Senin sorunun şu ki, senin durumunda, dist/repoya bağlı değil (içinde olduğu için .gitignore). Gerçek kodun yaşadığı yer burasıdır. paket npm kayıt defterine yayımlanmadan önce dist/dosyalardan oluşturulur src/, ancak dist/hiçbir zaman depoya bağlı değildir.

Bu çirkin, ancak bu durumda kaldırmak zorunda kalacak dist/dan .gitignoreçalıştırın sonra ve:

npm run build
git add .
git commit
git push

( npm installÖnce koştuğunuzdan emin olun )

Daha sonra github'dan yükleyebilmelisiniz.

Bunu postinstallkomut dosyası kullanarak yapmanın başka bir yolu olabilir , ancak bunun mümkün olup olmadığından emin değilim; Ben hiç denemedim.


2
Evet, hemen hemen çözüm buydu. Ayrıca bir npm kurulumu yapmak ve GruntFile'ı biraz değiştirmek zorunda kaldı, ama bu onu çalıştırdı. Yardımınız için teşekkürler :)
hughesjmh

2
Unignore dist ile yapmanın başka bir yolu yok mu? Orijinal depoya bir PR yapmak istiyorum, ama mesafeyle bundan hoşlanmayacak mı?
Ka Mok

7
Ben de, başka bir seçenek olduğunu düşünüyorum @KaMok package.jsonaltında bulunan çatal dosyaya scriptsyeniden adlandırma, prepublishiçin prepare. Görünüşe göre npm installveya npm install github:user_name/fork_name --save(ve iplik için aynı) çalıştırıldığında, aynı zamanda preparekomut dosyasındakileri de çalıştırır . Bu, prepublishbu paketin komut dosyasının derleme dosyalarını oluşturduğunu varsayar, bu genellikle böyledir.
davidfrancisco

5
ve belirli bir şubeye ihtiyacınız varsa,npm install <ghusername>/<repoName>#branchName
DrMeers

2
@RyanZim Yanılıyorsunuz. Git'ten kurulum, doğru bir şekilde kurulduğu sürece çok iyi çalışıyor. docs.npmjs.com/cli/install "yüklenen paketi içeriyorsa preparesenaryo, onun dependenciesve devDependencieskurulacak ve paket paketlenmiş ve kurulmadan önce, komut çalışacaktır hazırlayın."
Cameron Tacklind

15

Npm 5 kullananlar için güncelleme:

Npm @ 5 itibariyle, prepublishkomut dosyaları kullanımdan kaldırılmıştır.

prepareDerleme adımları ve prepublishOnlyyalnızca yükleme için kullanın .

"prepare": "npm run build"Komut dosyalarına bir eklemenin tüm sorunlarımı çözdüğünü buldum .


Bu benim için de çalıştı (yeni yaptığım bir çatalda) - teşekkürler! Merak ediyorum ... neden tüm paketler bu komut dosyası yapılandırmasını varsayılan olarak içermiyor? Bunun nedeni, paket yazarlarının paketlerini bir git deposundan yükleme durumunu değil, yalnızca paketlerini npm'den yüklemeyi düşündükleri için mi? Yani sadece manuel olarak çalıştırmaya alışkınlar npm run buildve bir npm run publishgün depoyu git aracılığıyla yüklemeye çalışmadıkça herhangi bir sorun veya acı çekmiyorlar mı?
Tyler Rick

9

Npmjs.com'da yayınlanan kod, genellikle paketin deposunda bulunan kod değildir. JavaScript kaynak dosyalarının kütüphanelerde genel kullanım amaçlı sürümler halinde "derlenmesi" yaygındır. Genellikle npmjs.com'da yayınlananlar budur.

O kadar yaygındır ki, yayınlamadan öncenpm otomatik olarak bir "derleme" adımı çalıştırma özelliğidir ( ). Başlangıçta bu denildi . Görünüşe göre Npm , bir geliştirme ortamını başlatmanın standart yolu olduğundan betiği de çalıştırmanın kullanışlı olacağını düşündü .npm publishprepublishprepublishnpm install

Bu, toplumda bazı büyük karışıklıklara yol açtı. Github'da bununla ilgili çok uzun sorunlar var.

Sonunda, eski davranışı değiştirmemek için iki otomatik komut dosyası daha eklemeye karar verdiler: prepublishOnlyve prepare.

prepublishOnlybeklediğinizi yapar. Devam etmiyor npm install. Pek çok paket bakıcısı körü körüne buna geçiş yaptı.

Ancak, insanların paket sürümlerini dağıtmak için npmjs.com'a bağımlı olmamak istedikleri bir sorun da vardı. Git depoları doğal seçimdi. Ancak "derlenmiş" dosyaları git'e kaydetmemek yaygın bir uygulamadır. İşlemek prepareiçin eklenen şey buydu ...

prepare doğru yol

Kaynak dosyalara sahip bir deponuz varsa, ancak onu kullanmak için bir "oluşturma" adımı gerekiyorsa
prepare, her durumda tam olarak istediğiniz şeyi yapar (npm 4 itibariyle).

prepare: Her ikisini de paket paketlenmeden ve yayınlanmadan ÖNCE, yerelde npm installherhangi bir bağımsız değişken olmadan ve git bağımlılıklarını yüklerken çalıştırın.

Yapı bağımlılıklarınızı bile içine koyabilirsiniz devDependenciesve bunlar prepareçalıştırılmadan önce kurulur .

İşte bu yöntemi kullanan bir paketim örneği .


İle ilgili sorunlar .gitignore

Bu seçenekle birçok insanı çeken bir sorun var. Bir bağımlılık hazırlarken, Npm ve Yarn sadecefiles bölümünde listelenen dosyaları tutacaktır package.json.

filesVarsayılan olarak tüm dosyaların dahil edildiğini görebilir ve bunların bittiğini düşünebilirsiniz. Ne kolayca cevapsız olmasıdır .npmignore çoğunlukla geçersiz kılar filesyönergesini ve , eğer .npmignoreyoksa, .gitignorebunun yerine kullanılır.

Eğer listelenen inşa dosyaları var ise, .gitignoreaklı başında bir insan gibi ve başka bir şey yapmayın, prepareolur görünmek kırık

filesYalnızca yerleşik dosyaları dahil ederseniz veya boş bir dosya eklerseniz .npmignore, hazırsınız demektir.

Benim tavsiyem, gerçekte yayınlanan tek dosyaların , yayınlanan paketin kullanıcıları tarafından ihtiyaç duyulan dosyalar olacak şekilde ayarlanması files(veya tersine çevrilerek .npmignore) olmasıdır . Imho, yayınlanmış paketlere derlenmemiş kaynakları eklemeye gerek yoktur.


Orijinal cevap: https://stackoverflow.com/a/57503862/4612476


1
PREPARE, POSTINSTALL yerine benim için çalıştı. Hazırlamada npm run build çalıştırdı.
Milind

6

@ RyanZim'in mükemmel cevabından yararlanmak, postinstallbunun için kesinlikle geçerli bir seçenektir.

Aşağıdakilerden birini yapın:

  1. Komut dosyalarına bir yükleme sonrası öğesi eklemek için çatallı deponuzdaki package.json dosyasını güncelleyin. Burada, derlenmiş çıktıyı elde etmek için ne gerekiyorsa çalıştırın (Tercihli).
  2. Package.json dosyanızı güncelleyin ve node_modules içindeki gerekli dizini güncelleyen bir postinstall ekleyin.

Başka bir kişinin deposunu çatalladıysanız, paketlerini GitHub aracılığıyla kurmanın komut dosyasını oluşturmak için gerekli araçları sağlamadığı için çalışmadığı sorununu göstermek için bir sorun ortaya atmaya değer olabilir. Oradan, bunu bir kurulum sonrası ile çözmek için bir PR kabul edebilir veya reddedebilirler ve # 2 yapabilirsiniz.


# 2'yi nasıl yapacağınızı açıklayabilir misiniz veya herhangi bir kaynağa sahip misiniz? Gitrepo yalnızca src değil dist içerdiğinde npm yüklemesinden sonra hangi komutları çalıştırmam gerekir
Daniel

1
@Daniel Özür dilerim, bunu geçmişte nerede yaptığımı hatırlamaya çalışıyorum. Sanırım # 2 ile ana packages.json'a en iyi yanıt için adımları çalıştıracak bir yükleme sonrası adımı eklemeyi kastettim, böylece "postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"size sorun yaratan paketin uygulamanız çalışmadan önce oluşturulduğundan emin olmak için satır boyunca bir şey . Dediğim gibi, repoyu kendi kullanıcıma çatallaştırma, postinstall'u paketin kendisine ekleme ve bunu uygulamamda kullanma yaklaşımını tercih ediyorum.
Mike B

Bence hazırlamaya eklemenin tercih edilmesi gerektiğini düşünüyorum (@ Simon'ın cevabı), çünkü npm'den kurulum yapıyorsanız, herhangi bir ek bina yapmanız gerekmeyecektir çünkü zaten bir dist / dir içermelidir. Bkz. Docs.npmjs.com/misc/scripts : " Hazırla : Her ikisini de paket paketlenip yayınlanmadan ÖNCE çalıştır ... ve git bağımlılıklarını yüklerken"
Tyler Rick

postinstalldoğru çözümden bir adım daha kısadır. Sadece kullan prepare.
Yıl

2

Sadece komutu kullanın npm install git+https://git@github.com/myRepo/angular-translate.git. Teşekkürler.

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.