Bir dosyayı değiştirdikten sonra düğümü yeniden başlat


172

PHP geçmişinden gelen birisi için düğümü öldürme ve her kod değişikliğinden sonra yeniden başlatma işlemi çok sıkıcı görünüyor. Kod değişikliği kaydedildiğinde düğümü otomatik olarak yeniden başlatmak için düğümü olan bir komut dosyasını başlatırken herhangi bir bayrak var mı?

Yanıtlar:


94

sonsuza kadar modül birden fazla node.js sunucusu kavramına sahiptir ve şu anda çalışan sunucuları başlatabilir, yeniden başlatabilir, durdurabilir ve listeleyebilir. Ayrıca dosyaları değiştirmek için izleyebilir ve düğümü gerektiği gibi yeniden başlatabilir.

Zaten sahip değilseniz kurun:

npm install forever -g

Yükledikten sonra şu foreverkomutu çağırın : -wdeğişiklik için dosyayı izlemek üzere bayrağı kullanın:

forever -w ./my-script.js

Ayrıca, dizini izleyebilir ve kalıpları yoksayabilirsiniz:

forever --watch --watchDirectory ./path/to/dir --watchIgnore *.log ./start/file

+1 sonsuza kadar hem geliştirme / test etme hem de üretim için oldukça çok yönlüdür.
smertrios

1
Sonsuza kadar bu komutla ES2015 Expess.js / Webpack sunucumu yeniden başlatmak için kullanmayı denedim forever -c babel-node -w --watchDirectory ./server ./server/index.js ama ne yazık ki sonsuza kadar bir kuyruk noktasına gönderiyor gibi görünüyor ve sunucuyu çok sık yeniden başlatıyor ve port zaten kullanım hatalarına neden oluyor ... yeniden başlattıktan sonra duraklama eklensin mi?
Brian Di Palma

1
@BrianDiPalma İzleme dizininin altında günlükler gibi değişen dosyalar varsa, belki de bazı yok sayma kalıpları eklemelisiniz. Yeniden başlatmalar arasında bir gecikme tanımlayıp tanımlayamayacağınızı görmek için dokümanları kontrol edin.
hyde

1
@ hyde Bu gerekli olan bir gecikme değildi -tveya gerekli olan killTreeseçenek, sanırım babel-düğüm öldürülüyordu ama ortaya çıkan Express sunucusu değil.
Brian De Palma

2
Forever JS, Windows'da komut dosyası sonlandırıldığında Düğüm işlemini öldürmeyen bir hataya sahiptir. Düğüm işlemini el ile öldürmek
zorundasınız

157

İyi bir seçenektir Düğüm-gözetmen ve Dosya Değişikliği node.js Yeniden genellikle bunu nasıl kullanılacağı hakkında iyi bir makale:

 npm install supervisor -g

ve uygulamanızın kök dizinine geçtikten sonra aşağıdakileri kullanın

 supervisor app.js

Nodemon'u daha önce sorunsuz bir şekilde kullandığım için, her ne sebeple olursa olsun.
ZenMaster

1
Benim için de çalıştı. Ben server.jssürekli yeniden başlatıldı çünkü varsayılan joker izle parametresini geçersiz kılmak zorunda kaldı , bu sunucum önyükleme üzerinde istemci oluşturma ve böylece dosyaları değiştirme nedeniyle oldu. supervisor --watch server.js server.jsçözüldü.
scipilot

2
Düğüm süpervizörü artık korunmamaktadır.
aleung

Tıkır tıkır çalışıyor!!
JRichardsz

En sevdiğim, dosyanın değiştirilip değiştirilmediğini kontrol etmek için yenileme aralıkları neredeyse anında!
NiCk Newman

100

Nodemon gibi bir şeye bakmalısın .

Nodemon, nodemon'un başlatıldığı dizindeki dosyaları izler ve değişirse düğüm uygulamanızı otomatik olarak yeniden başlatır.

Misal:

nodemon ./server.js localhost 8080

ya da sadece

nodemon server

Düğümün neden kod değişikliklerini uygulamak için yeniden başlatılmasını gerektirdiğine dair bir fikrin var mı? Ve neden diğer sunucular (Apache / PHP gibi) yeniden başlatma gerektirmiyor?
maverick

2
@ dk49, çünkü bu durumda PHP komut dosyaları gelen her istek için başlatılır ve sayfa oluşturulduktan sonra durdurulur.
Daerdemandt

@Daerdemandt bunu paylaştığınız için teşekkürler .. ama yine de neden alamadım sunucu (herhangi bir platformda) başlatmak ve durdurmak gerekiyor? Dosya önbelleklerini koruduğu için mi (yanıtlar)? Sunucunun istek sırasında dosyaları diskten yükleyeceğini, işlediğini ve ardından yanıtı göndereceğini düşündüm. Sunucu tarafı programlama konusunda yeniyim.
maverick

Nodemon'u üretim ortamında kullanabilir misiniz?
JoeTidee

1
Nodemon'un bugün hala nasıl devam ettiğinden emin değilim (2012'de olduğu gibi), ancak güvenlik nedenleriyle, bir dosya değiştiğinde sunucumun eşya üzerinde yeniden başlatılmasını isteyeceğimden emin değilim. Pm2 gibi bir şey bir üretim ortamı için daha uygun olabilir.
Menztrual

43

Bu görevi kolaylaştırmak için çeşitli NPM paketleri mevcuttur.

Geliştirme için

  • nodemon : en popüler ve aktif olarak korunur
  • sonsuza dek : en popüler ikinci
  • node-dev : Mayıs 2019'dan bu yana taahhüt yok
  • amir : - artık bakım yapılmıyor

Üretim için (kümeleme, uzaktan dağıtım vb. Gibi genişletilmiş işlevlerle)

Forever, pm2 ve StrongLoop arasındaki karşılaştırma StrongLoop'un web sitesinde bulunabilir.


3
@ 2019 nodemon, hala devam eden 4 geliştirme seçeneğinden sadece biri gibi görünüyor.
mvermand

1
@mvermand Evet, son zamanlarda nodemon dışında hiçbiri için yeni sürüm yayınlanmadı. Üretim için PM2 hala iyi korunmaktadır.
Kay

16

Ayrıca deneyebilirsiniz Nodemon'u

Nodemon'u Yüklemek İçin

npm install -g nodemon

Nodemon'u kullanmak için

Normalde düğüm programını aşağıdaki gibi başlatırız:

node server.js

Ama burada aşağıdakileri yapmak zorundasınız:

nodemon server.js

İyi ve basit aswer !!
lesimoes

1
nodemon'un can sıkıcı böcekleri var. Benim için zaman kaybıydı.
kta

Bu yanıtın 2012 nodemon yanıtından farkı nedir?
Dan Dascalescu

9

Düğüm-dev

Düğüm-dev onların masaüstünde bildirimler homurtu almak (veya libnotify) ister geliştiriciler için hem nodemon ve denetçiye harika bir alternatif olduğunda sunucu yeniden başlatıldığında veya olduğunda hata veya değişiklik dosyada .

Kurulum:

npm install -g node-dev

Düğüm yerine düğüm-dev kullan:

node-dev app.js

Sunucunun otomatik olarak başlaması için dosyayı değiştirme bildirimi

resim açıklamasını buraya girin

konsol çıkışı

resim açıklamasını buraya girin


3

Ben runjsgibi kullanın :

runjs example.js

Paket sadece run

npm install -g run

2
daha iyi değil, sadece başka bir seçenek
sp2danny 10:01 '

Bu cevap, neden kullandığınızı runve mevcut alternatiflerle nasıl karşılaştırıldığını açıklarsa çok daha değerli olacaktır . Sadece başka bir seçeneği boşaltmak sadece seçim paradoksuna katkıda bulunur. (Neyse ki run2015'ten beri güncellenmedi, bu yüzden şimdi bir seçenek değil.)
Dan Dascalescu

0

Adımları takip et:

  1. npm install --save-dev nodemon

  2. Şu iki satırı package.json dosyasının "script" bölümüne ekleyin:

"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"

Aşağıda gösterildiği gibi:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./bin/www",
    "devstart": "nodemon ./bin/www"
}
  1. npm run devstart

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/skeleton_website


Aslında, 2012 ile aynı cevap , ama etrafında daha fazla "büyü" ile mevcut. Ama cevabın özü "nodemon kullan". Sıfırlama teğetseldir. Kötü biçimlendirilmiş, ancak David'in bunu düzelttiğini görüyorum, bu yüzden downvote'umu geri alacağım.
Dan Dascalescu
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.