nodemon je nástroj, který pomáhá při vývoji aplikací založených na node.js tím, že automaticky restartuje aplikaci node při zjištění změn souborů v adresáři.
nodemon nevyžaduje žádné další změny v kódu nebo způsobu vývoje. nodemon je náhradní wrapper pro node
. Chcete-li použít nodemon
, nahraďte slovo node
na příkazovém řádku při spouštění skriptu.
- Instalace
- Použití
- Automatické opětovné spuštění
- Ruční restartování
- Konfigurační soubory
- package.json
- Použití nodemonu jako modulu
- Použití nodemonu jako podřízeného procesu
- Spouštění jiných než uzlových skriptů
- Výchozí spustitelné soubory
- Sledování více adresářů
- Určení seznamu sledovaných přípon
- Ignorování souborů
- Aplikace se nerestartuje
- Odložení restartování
- Gracefully reloading down your script
- Řízení vypínání skriptu
- Spouštění událostí při změně stavu nodemonu
- Pipe výstup někam jinam
- Použití nodemonu v pracovním postupu gulp
- Použití nodemonu v pracovním postupu gruntu
- Výslovnost
- Zásady návrhu
- Často kladené otázky
- Podporovatelé
- Sponzoři
- Licence
Instalace
Buď klonováním pomocí git, nebo pomocí npm (doporučený způsob):
npm install -g nodemon
A nodemon bude nainstalován globálně do vaší systémové cesty.
Nodemon můžete také nainstalovat jako vývojovou závislost:
npm install --save-dev nodemon
Při lokální instalaci nebude nodemon dostupný ve vaší systémové cestě. Místo toho lze místní instalaci nodemonu spustit jeho voláním ze skriptu npm (například npm start
) nebo pomocí npx nodemon
.
Použití
nodemon obaluje vaši aplikaci, takže mu můžete předat všechny argumenty, které byste normálně předávali své aplikaci:
nodemon
Pro volby CLI použijte argument -h
(nebo --help
):
nodemon -h
Použití nodemonu je jednoduché, pokud by moje aplikace přijímala jako argumenty hostitele a port, spustil bych ji takto:
nodemon ./server.js localhost 8080
Jakýkoli výstup z tohoto skriptu je opatřen předponou , jinak bude veškerý výstup z vaší aplikace, včetně chyb, vypsán podle očekávání.
Pokud není zadán žádný skript, nodemon otestuje soubor package.json
a pokud jej najde, spustí soubor spojený s hlavní vlastností (ref).
Příznak inspect
můžete uzlu předat také prostřednictvím příkazového řádku jako obvykle:
nodemon --inspect ./server.js 80
Pokud máte pro svou aplikaci soubor package.json
, můžete hlavní skript zcela vynechat a uzel nodemon načte package.json
pro vlastnost main
a použije tuto hodnotu jako aplikaci.
Nodemon bude také hledat vlastnost scripts.start
v package.json
(od verze nodemon 1.1.x).
Také se podívejte na často kladené otázky nebo problémy pro nodemon.
Automatické opětovné spuštění
Nodemon byl původně napsán pro restartování visících procesů, jako jsou webové servery, ale nyní podporuje aplikace, které se čistě ukončí. Pokud váš skript skončí čistě, nodemon bude nadále sledovat adresář (nebo adresáře) a v případě jakýchkoli změn skript restartuje.
Ruční restartování
Pokud je nodemon spuštěn, pokud potřebujete ručně restartovat aplikaci, můžete místo zastavení a restartu nodemonu napsat rs
s návratem vozíku a nodemon váš proces restartuje.
Konfigurační soubory
nodemon podporuje místní a globální konfigurační soubory. Ty se obvykle jmenují nodemon.json
a mohou být umístěny v aktuálním pracovním adresáři nebo ve vašem domovském adresáři. Alternativní lokální konfigurační soubor lze zadat pomocí volby --config <file>
.
Specifikum je následující, takže argument příkazového řádku vždy potlačí nastavení konfiguračního souboru:
- argumenty příkazového řádku
- lokální konfigurace
- globální konfigurace
Konfigurační soubor může přebírat kterýkoli z argumentů příkazového řádku jako hodnoty klíče JSON, např:
{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}
Výše uvedený soubor nodemon.json
může být můj globální konfigurační soubor, takže mám podporu pro soubory ruby a soubory pro zpracování a mohu spustit nodemon demo.pde
a nodemon bude automaticky vědět, jak spustit skript, i když z krabice podporuje skripty pro zpracování.
Další příklad možností si můžete prohlédnout v souboru sample-nodemon.md
package.json
Pokud chcete mít všechny konfigurace balíčků na jednom místě, nodemon podporuje použití package.json
pro konfiguraci.Zadejte konfiguraci ve stejném formátu jako u konfiguračního souboru, ale pod nodemonConfig
v souboru package.json
, například vezměte následující package.json
:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}
Všimněte si, že pokud zadáte soubor --config
nebo poskytnete místní nodemon.json
, bude jakákoli konfigurace package.json
ignorována.
Tato část potřebuje lepší dokumentaci, ale prozatím se můžete podívat na nodemon --help config
(také zde).
Použití nodemonu jako modulu
Prosím, podívejte se na doc/requireable.md
Použití nodemonu jako podřízeného procesu
Prosím, podívejte se na doc/events.md
Spouštění jiných než uzlových skriptů
nodemon lze také použít ke spouštění a monitorování jiných programů. Nodemon bude číst příponu spouštěného skriptu a monitorovat tuto příponu místo .js
, pokud není nodemon.json
:
nodemon --exec "python -v" ./app.py
Nyní bude nodemon spouštět app.py
s pythonem v režimu verbose (všimněte si, že pokud nepředáváte programu exec argumenty, nepotřebujete uvozovky) a hledat nové nebo změněné soubory s příponou .py
.
Výchozí spustitelné soubory
Pomocí konfiguračního souboru nodemon.json
můžete definovat vlastní výchozí spustitelné soubory pomocí vlastnosti execMap
. To je užitečné zejména v případě, že pracujete s jazykem, který není ve výchozím nastavení podporován programem nodemon.
Chcete-li přidat podporu pro to, aby nodemon věděl o příponě .pl
(pro Perl), do souboru nodemon.json
přidejte:
{ "execMap": { "pl": "perl" }}
Při spuštění následujícího bude nodemon vědět, že má jako spustitelný soubor použít perl
:
nodemon script.pl
Obvykle se doporučuje používat globální nodemon.json
pro přidání vlastních voleb execMap
. Pokud však nějaká běžná výchozí volba chybí, lze ji začlenit do projektu tak, aby ji nodemon podporoval ve výchozím nastavení, a to změnou souboru default.js a zasláním žádosti o stažení.
Sledování více adresářů
Ve výchozím nastavení nodemon sleduje aktuální pracovní adresář. Pokud chcete převzít kontrolu nad touto volbou, použijte volbu --watch
a přidejte konkrétní cesty:
nodemon --watch app --watch libs app/server.js
Nyní se nodemon restartuje pouze v případě změn v adresáři ./app
nebo ./libs
. Ve výchozím nastavení bude nodemon procházet podadresáře, takže není třeba explicitně zahrnovat podadresáře.
Nepoužívejte unixový globbing pro předání více adresářů, např. --watch ./lib/*
, nebude to fungovat. Potřebujete příznak --watch
pro každý sledovaný adresář.
Určení seznamu sledovaných přípon
nodemon -e js,pug
Nyní se nodemon restartuje při jakékoliv změně souborů v adresáři (nebo podadresářích) s příponami .js
, .pug
.
Ignorování souborů
Ve výchozím nastavení se nodemon restartuje pouze při změně souboru .js
JavaScript. V některých případech budete chtít ignorovat některé konkrétní soubory, adresáře nebo vzory souborů, abyste zabránili předčasnému restartování aplikace nodemonem.
To lze provést pomocí příkazového řádku:
nodemon --ignore lib/ --ignore tests/
Nebo lze ignorovat konkrétní soubory:
nodemon --ignore lib/app.js
Vzory lze také ignorovat (nezapomeňte však uvést argumenty):
nodemon --ignore 'lib/*.js'
Všimněte si, že ve výchozím nastavení bude nodemon ignorovat adresáře .git
, node_modules
, bower_components
, .nyc_output
, coverage
a .sass-cache
a přidá vaše ignorované vzory do seznamu. Pokud chcete skutečně sledovat adresář jako node_modules
, musíte přepsat základní výchozí pravidla pro ignorování.
Aplikace se nerestartuje
V některých síťových prostředích (například kontejner se spuštěným nodemonem, který čte přes připojený disk) budete muset použít legacyWatch: true
, který povolí dotazování Chokidaru.
Přes CLI použijte buď --legacy-watch
nebo -L
pro zkrácení:
nodemon -L
Ačkoli by to měla být poslední možnost, protože bude dotazovat každý soubor, který najde.
Odložení restartování
V některých situacích můžete chtít počkat, až se změní řada souborů. Časový limit před kontrolou nových změn souborů je 1 sekunda. Pokud nahráváte řadu souborů a trvá to určitý počet sekund, může to způsobit, že se aplikace zbytečně několikrát restartuje.
Chcete-li přidat další plyn nebo zpozdit restartování, použijte příkaz --delay
:
nodemon --delay 10 server.js
Pro větší přesnost lze zadat milisekundy. Buď jako float:
nodemon --delay 2.5 server.js
Nebo pomocí specifikátoru času (ms):
nodemon --delay 2500ms server.js
Údaj o zpoždění je počet sekund (nebo milisekund, pokud je zadán), které se mají před restartem odložit. Nodemon tedy restartuje aplikaci až po uplynutí daného počtu sekund od poslední změny souboru.
Pokud tuto hodnotu nastavujete v nodemon.json
, bude hodnota vždy interpretována v milisekundách. Např, následující hodnoty jsou ekvivalentní:
nodemon --delay 2.5{ "delay": "2500"}
Gracefully reloading down your script
Je možné, aby nodemon odeslal aplikaci libovolný signál, který zadáte.
nodemon --signal SIGHUP server.js
Vaše aplikace může signál zpracovat následujícím způsobem.
process.once("SIGHUP", function () { reloadSomeConfiguration();})
Vezměte prosím na vědomí, že nodemon pošle tento signál každému procesu ve stromu procesů.
Pokud používáte cluster
, pak tento signál obdrží každý worker (i master). Pokud si přejete ukončit všechny workery při přijetí signálu SIGHUP
, běžným vzorem je zachytit SIGHUP
v masteru a předat SIGTERM
všem workerům, přičemž zajistíte, aby všichni workeři ignorovali SIGHUP
.
Řízení vypínání skriptu
nodemon vyšle vaší aplikaci signál kill, když uvidí aktualizaci souboru. Pokud potřebujete provést úklid při vypnutí uvnitř vašeho skriptu, můžete zachytit signál kill a zpracovat jej sami.
Následující příklad jednou vyslechne signál SIGUSR2
(používaný nodemonem k restartu), spustí proces úklidu a pak se sám zabije, aby nodemon mohl pokračovat v řízení:
process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});
Všimněte si, že process.kill
je volán až po dokončení vašich úloh pro vypnutí. Hat tip to Benjie Gillam for writing this technique up.
Spouštění událostí při změně stavu nodemonu
Pokud chcete, aby se při restartu nodemonu objevila oznámení typu growl nebo aby se při nějaké události spustila akce, pak můžete buď require
nodemon nebo přidat akce událostí do souboru nodemon.json
.
Příklad pro spuštění oznámení na Macu při restartu nodemonu vypadá nodemon.json
takto:
{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}
Úplný seznam dostupných událostí je uveden na wiki o stavech událostí. Všimněte si, že se můžete vázat jak na stavy, tak na zprávy.
Pipe výstup někam jinam
Použití nodemonu v pracovním postupu gulp
Podívejte se na zásuvný modul gulp-nodemon, který umožňuje integrovat nodemon se zbytkem pracovního postupu gulp vašeho projektu.
Použití nodemonu v pracovním postupu gruntu
Vyzkoušejte zásuvný modul grunt-nodemon pro integraci nodemonu se zbytkem pracovního postupu gruntu vašeho projektu.
Výslovnost
Nodemon, vyslovuje se: node-mon, no-demon nebo node-e-mon (jako pokémon)?“
No… na to už jsem se ptal mnohokrát. Líbí se mi, že se mě na to už někdo ptal. Byly tu sázky, který z nich to vlastně je.
Odpověď je jednoduchá, ale možná frustrující. Neříkám (jak to vyslovuji). Je na vás, abyste to nazvali, jak chcete. Všechny odpovědi jsou správné 🙂
- Méně příznaků je lépe
- Funguje na všech platformách
- Méně funkcí
- Nechte jednotlivce. stavět nad nodemonem
- Nabídnout všechny funkce CLI jako API
- Příspěvky musí mít a projít testy
Nodemon není dokonalý, a argumenty CLI se rozrostly nad rámec toho, kde jsem úplně spokojený, ale snad se to jednou podaří trochu zredukovat.
Často kladené otázky
Podívejte se na často kladené otázky a přidejte prosím své vlastní, pokud si myslíte, že by pomohly ostatním.
Podporovatelé
Děkujeme všem našim podporovatelům! 🙏
Sponzoři
Podpořte tento projekt tím, že se stanete jeho sponzorem. Zobrazí se zde vaše logo s odkazem na vaše webové stránky. Sponzorujte tento projekt ještě dnes ❤️
Licence
MIT http://rem.mit-license.org
.