Npm aracılığıyla kurulan bir düğüm modülü nasıl düzenlenir?


125

Doğrulayıcı modülünü kullanan node_swiz modülünü kullanıyorum.

Doğrulayıcı modülünde değişiklik yapmak istiyorum, ancak modülleri / bağımlılıkları yüklemek için npm kurulumunu kullandım.

Node_modules içindeki doğrulayıcı modülünde değişiklikler yapabilir miyim, yoksa bu node_modules bağımlılıkları yeniden oluşturulacak ve heroku'da yayınladığımda veya npm kurulumunu bir sonraki çalıştırdığımda en son sürüm alınacak mı?

Yapı şuna benzer:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Yardım için teşekkürler!

Yanıtlar:


244

Dosyayı doğrudan düzenleyebilirsiniz, ancak npm her güncelleme yaptığında bunun üzerine yazılır, yapılacak en iyi şey doğrudan kaynağa gitmektir.

Değişiklikler tüm modülün işlevselliğini etkiliyorsa ve başkaları için faydalı olabilirse, github'daki orijinal kaynağa katkıda bulunmak ve uygulanacak değişikliği aramak isteyebilirsiniz.

Bu gerekli olan özel bir işlevsellikse ve modülün geliştirilmesine yardımcı olmayacaksa, yapılacak en iyi şey, onu github'dan çatallaştırmak ve değişikliklerinizi yapmaktır. Öğeleri NPM kullanarak doğrudan github'dan yükleyebilirsiniz ve bu yöntem, gelecekteki değişiklikleri orijinal kaynaktan özel sürümünüze entegre etmenize olanak tanır.

Doğrudan github'dan yüklemek için aşağıdaki komutu kullanın:

npm install https://github.com/<username>/<repository>/tarball/master


2
Teşekkürler! Tam olarak bilmek istediğim buydu. Ayrıca, bunu okuyan diğerleri için ...
Github'ımdaki

22
çatallamadan önce yerel sistemde değiştiriyorum, ancak değişiklik etkilemiyor gibi görünüyor. Node_modules / paket_adı / lib / dosya_adı.js olan herhangi bir javascript dosyasını değiştirmek etkiler mi?
meraklı

1
Sadece bir not, bir şeylerin değişip değişmediğinden emin değilim ama şahsen Git URL'sini git: //github.com/ <user> / <package> .git "olarak belirtmek zorunda kaldım
Craig

5
@JohnDevor Özelleştirilmiş modülü kurmak yerine, klasörüne bir sym-link oluşturmak için "npm link" komutunu kullanın: docs.npmjs.com/cli/link
Venryx

3
Anladım, içindeki klasöre gitmem /node_modulesve çalıştırmam gerekiyordu, npm installsonra her şey yolunda!
Adam Moisa

9

Düğüm modüllerinde değişiklik yapmak ve bunları sürdürmek için yama paketini kullanabilirsiniz .

Bu, önce içindeki pakette değişiklikler yaparak node_modulesve ardından <package name>yeni değişiklik yaptığınız paketin adı olan aşağıdaki komutu çalıştırarak yapılabilir.

npx patch-package <package name>

patch-package, patchesdeğişikliklerinizi temsil eden, içinde bir dosya bulunan bir klasör oluşturur . Bu dosya daha sonra git'e teslim edilebilir ve yamalar daha sonra çalıştırılarak npx patch-package(herhangi bir argüman olmadan) geri yüklenebilir .

İsteğe bağlı adım:

Aşağıdakini, "npm install" komutunu çalıştırdığınızda bağımlılığı otomatik olarak düzeltmek için package.json dosyanızın komut dosyası bölümüne ekleyin.

"postinstall": "npx patch-package" 

1
Herhangi bir sorun yaşamadan benim için çalışan çok güzel bir çözüm.
ヨ ハ ン ソ ン

bu gerçekten havalı! Bilginize: "postinstall" yerine "preinstall" kullanmak zorunda kaldım çünkü yamam bağımlılığın kurulum sonrası betiğiydi. Kurulum sonrası aşamada uygulanması gereken başka yamalarınız olsaydı bunu nasıl uygularsınız?
Superole

1
İnanılmaz bir cevap, netlify için dağıtmadan önce bir dağıtımda değişiklik yapmam gerekiyordu. preinstall 'npx patch-package' sihirli bilet oldu. Uygun görüntü artık web sitesinde gösterilmektedir.
TheBetterJORT

1

Yeni bir modül yayınlamak istemedim ve ayrıca npm installdeğişikliklerimin üzerine yazmak istemedim . Bu sorunların her ikisine de bir çözüm buldum, ancak @ Sdedelbrock'un tavsiyesine uymak muhtemelen daha iyi olacaktır. Ancak bunu yapmak istiyorsanız, işte nasıl:

  1. Düzenlemek package.jsonistediğiniz bağımlılığı kaldırmak için dosyanızı düzenleyin.
  2. Projenize gidin /node_modulesve klasörü deponuzda kaydedilebilecek başka bir yere taşıyın. Yani şimdi /node_modules/dependencyaltındadır/dependency
  3. cd bağımlılık dizinine ve yazın npm link
  4. cdproje dizininizin köküne girin ve yazın npm link dependency Bunu dışında yapmanız /node_modulesve/dependency

Her şey işe yaradıysa, şimdi içinde oluşturulmuş bir sembolik bağlantınız olmalıdır /node_modules/dependency. Şimdi çalışıp çalışmadığını görmek için projenizi çalıştırabilirsiniz.

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.