a nodemon egy olyan eszköz, amely segíti a node.js alapú alkalmazások fejlesztését azáltal, hogy automatikusan újraindítja a node alkalmazást, amikor a könyvtárban lévő fájlok változását észleli.
a nodemon nem igényel további változtatásokat a kódban vagy a fejlesztési módszerben. a nodemon a node
helyettesítő burkolata. A nodemon
használatához helyettesítsd a node
szót a parancssorban a szkripted végrehajtásakor.
- Telepítés
- Használat
- Automatikus újraindítás
- Kézi újraindítás
- Konfigurációs fájlok
- package.json
- A nodemon modulként való használata
- A nodemon gyermekfolyamatként való használata
- Nem nodemon szkriptek futtatása
- Alapértelmezett futtatható fájlok
- Több könyvtár figyelése
- Kiterjesztés figyelési lista megadása
- Fájlok figyelmen kívül hagyása
- Az alkalmazás nem indul újra
- Az újraindítás késleltetése
- Gracefully reloading down your script
- A szkripted leállításának vezérlése
- Események kiváltása, amikor a nodemon állapota megváltozik
- Kimenet máshová továbbítása
- A nodemon használata a gulp munkafolyamatban
- A nodemon használata a Grunt munkafolyamatban
- Kiejtés
- Tervezési elvek
- GYIK
- Támogatók
- Szponzorok
- Licenc
Telepítés
Vagy a git segítségével történő klónozással vagy az npm használatával (az ajánlott módszer):
npm install -g nodemon
A nodemon pedig globálisan települ a rendszered útvonalára.
A nodemon telepíthető fejlesztési függőségként is:
npm install --save-dev nodemon
Lokális telepítés esetén a nodemon nem lesz elérhető a rendszerútvonaladon. Ehelyett a nodemon helyi telepítése úgy futtatható, hogy egy npm szkriptből (például npm start
) vagy a npx nodemon
segítségével hívja meg.
Használat
a nodemon becsomagolja az alkalmazást, így átadhatja az összes olyan argumentumot, amit általában átadna az alkalmazásnak:
nodemon
A CLI-opciókhoz használja a -h
(vagy --help
) argumentumot:
nodemon -h
A nodemon használata egyszerű, ha az alkalmazásom elfogadná a hosztot és a portot argumentumként, akkor így indítanám el:
nodemon ./server.js localhost 8080
A szkript minden kimenete előtt szerepel, egyébként az alkalmazásod minden kimenete, beleértve a hibákat is, a várt módon visszhangra kerül.
Ha nincs megadott szkript, a nodemon egy package.json
fájlt fog keresni, és ha talál, akkor a fő tulajdonsághoz (ref) tartozó fájlt fogja futtatni.
A inspect
jelzőt a parancssoron keresztül is átadhatja a node-nak, ahogy általában tenné:
nodemon --inspect ./server.js 80
Ha van egy package.json
fájl az alkalmazáshoz, akkor a főszkriptet teljesen elhagyhatja, és a nodemon a main
tulajdonsághoz a package.json
-et olvassa be, és ezt az értéket használja az alkalmazásként.
a nodemon a scripts.start
tulajdonságot is meg fogja keresni a package.json
-ben (a nodemon 1.1.x-től kezdve).
A nodemon GYIK-jét vagy problémáit is megnézheti.
Automatikus újraindítás
a nodemon eredetileg a lógó folyamatok, például webszerverek újraindítására íródott, de most már támogatja a tisztán kilépő alkalmazásokat is. Ha a szkriptje tisztán kilép, a nodemon továbbra is figyeli a könyvtárat (vagy könyvtárakat), és újraindítja a szkriptet, ha bármilyen változás történik.
Kézi újraindítás
A nodemon futása közben, ha manuálisan újra kell indítani az alkalmazást, a nodemon leállítása és újraindítása helyett beírhatja a rs
billentyűt egy kocsisorral, és a nodemon újraindítja a folyamatot.
Konfigurációs fájlok
a nodemon támogatja a helyi és globális konfigurációs fájlokat. Ezek neve általában nodemon.json
, és lehetnek az aktuális munkakönyvtárban vagy az otthoni könyvtárban. Egy alternatív helyi konfigurációs fájl megadható a --config <file>
opcióval.
A sajátosság a következő, így egy parancssori argumentum mindig felülírja a config fájl beállításait:
- parancsnoki argumentumok
- local config
- global config
A config fájl a parancssori argumentumok bármelyikét felveheti például JSON kulcsértékként:
{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}
A fenti nodemon.json
fájl lehet az én globális configom, így támogatom a ruby fájlokat és a feldolgozó fájlokat, és futtathatom a nodemon demo.pde
fájlt, és a nodemon automatikusan tudni fogja, hogyan kell futtatni a szkriptet, még akkor is, ha out of the box támogatja a feldolgozó szkripteket.
Az opciók további példája a sample-nodemon.md
package.json
Ha az összes csomagkonfigurációt egy helyen szeretnénk tartani, a nodemon támogatja a package.json
használatát a konfigurációhoz.Adja meg a configot ugyanabban a formátumban, mint egy config fájlban, de nodemonConfig
alatt a package.json
fájlban, például vegye a következő package.json
:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}
Figyeljen arra, hogy ha egy --config
fájlt ad meg, vagy egy helyi nodemon.json
-t ad meg, minden package.json
configot figyelmen kívül hagy.
Ez a rész jobb dokumentációt igényel, de egyelőre lásd még nodemon --help config
(szintén itt).
A nodemon modulként való használata
Lásd doc/requireable.md
A nodemon gyermekfolyamatként való használata
Lásd doc/events.md
Nem nodemon szkriptek futtatása
a nodemon más programok futtatására és felügyeletére is használható. A nodemon beolvassa a futtatandó szkript fájlkiterjesztését, és ezt a kiterjesztést figyeli .js
helyett, ha nincs nodemon.json
:
nodemon --exec "python -v" ./app.py
A nodemon most a app.py
pythonnal verbose módban fogja futtatni (figyeljünk arra, hogy ha nem adunk át args-t az exec programnak, akkor nincs szükség az idézőjelekre), és új vagy módosított .py
kiterjesztésű fájlokat keres.
Alapértelmezett futtatható fájlok
A nodemon.json
konfigurációs fájl segítségével a execMap
tulajdonság segítségével meghatározhatja saját alapértelmezett futtatható fájljait. Ez különösen akkor hasznos, ha olyan nyelvvel dolgozol, amelyet a nodemon alapértelmezés szerint nem támogat.
Azért, hogy a nodemon tudjon a .pl
kiterjesztésről (Perl esetén), a nodemon.json
fájlban a következőket kellene hozzáadni:
{ "execMap": { "pl": "perl" }}
Az alábbiakat futtatva a nodemon tudni fogja, hogy a perl
-t használja futtatható programként:
nodemon script.pl
A saját execMap
beállítások hozzáadásához általában a globális nodemon.json
használata ajánlott. Azonban, ha van egy általános alapértelmezett, ami hiányzik, az beolvasztható a projektbe, hogy a nodemon alapértelmezetten támogassa azt, a default.js módosításával és egy pull request elküldésével.
Több könyvtár figyelése
A nodemon alapértelmezetten az aktuális munkakönyvtárat figyeli. Ha át akarod venni az irányítást ezen opció felett, akkor a --watch
opcióval adj hozzá konkrét elérési utakat:
nodemon --watch app --watch libs app/server.js
A nodemon mostantól csak akkor fog újraindulni, ha a ./app
vagy ./libs
könyvtárban változások történnek. Alapértelmezés szerint a nodemon végigjárja az alkönyvtárakat, így nincs szükség az alkönyvtárak explicit bevonására.
Ne használj unix globbingot több könyvtár átadásához, pl. --watch ./lib/*
, ez nem fog működni. Figyelt könyvtáranként egy --watch
flag kell.
Kiterjesztés figyelési lista megadása
nodemon -e js,pug
A nodemon mostantól újraindul a könyvtárban (vagy alkönyvtárakban) lévő .js
, .pug
kiterjesztésű fájlok minden változásakor.
Fájlok figyelmen kívül hagyása
A nodemon alapértelmezés szerint csak akkor indul újra, ha egy .js
JavaScript fájl változik. Bizonyos esetekben érdemes figyelmen kívül hagyni bizonyos fájlokat, könyvtárakat vagy fájlmintákat, hogy a nodemon ne indítsa újra idő előtt az alkalmazást.
Ez megtehető a parancssoron keresztül:
nodemon --ignore lib/ --ignore tests/
Vagy bizonyos fájlok figyelmen kívül hagyhatók:
nodemon --ignore lib/app.js
A mintákat is figyelmen kívül lehet hagyni (de az argumentumokat mindenképpen idézzük):
nodemon --ignore 'lib/*.js'
Megjegyezzük, hogy alapértelmezés szerint a nodemon figyelmen kívül hagyja a .git
, node_modules
, bower_components
, .nyc_output
, coverage
és .sass-cache
könyvtárakat, és hozzáadja a figyelmen kívül hagyott mintákat a listához. Ha valóban figyelni akarsz egy olyan könyvtárat, mint a node_modules
, felül kell írnod a mögöttes alapértelmezett figyelmen kívül hagyási szabályokat.
Az alkalmazás nem indul újra
Egyes hálózati környezetekben (például egy konténerben, ahol a nodemon egy csatlakoztatott meghajtón keresztül olvas), szükséged lesz a legacyWatch: true
használatára, amely lehetővé teszi a Chokidar lekérdezését.
A CLI-n keresztül használja a --legacy-watch
vagy a -L
rövidítést:
nodemon -L
Bár ez csak a legvégső megoldás lehet, mivel minden fájlt lekérdez, amit talál.
Az újraindítás késleltetése
Némely helyzetben érdemes megvárni, amíg számos fájl megváltozik. Az új fájlváltozások keresése előtti időkorlát 1 másodperc. Ha több fájlt tölt fel, és ez néhány másodpercig tart, akkor ez az alkalmazás többszöri felesleges újraindítását okozhatja.
Az újraindítás késleltetéséhez, vagy egy extra fojtás hozzáadásához használja a --delay
parancsot:
nodemon --delay 10 server.js
A nagyobb pontosság érdekében milliszekundumokat is meg lehet adni. Vagy lebegőszámként:
nodemon --delay 2.5 server.js
Vagy az idő megadásával (ms):
nodemon --delay 2500ms server.js
A késleltetési szám az újraindítás előtt késleltetendő másodpercek (vagy milliszekundumok, ha megadtuk) száma. Tehát a nodemon csak a megadott számú másodperccel az utolsó fájlváltozást követően fogja újraindítani az alkalmazást.
Ha ezt az értéket a nodemon.json
-ben adod meg, akkor az értéket mindig milliszekundumban értelmezi. Pl, a következők egyenértékűek:
nodemon --delay 2.5{ "delay": "2500"}
Gracefully reloading down your script
Megoldható, hogy a nodemon bármilyen, Ön által megadott jelet küldjön az alkalmazásnak.
nodemon --signal SIGHUP server.js
Az alkalmazása a következőképpen kezelheti a jelet.
process.once("SIGHUP", function () { reloadSomeConfiguration();})
Figyeljen arra, hogy a nodemon ezt a jelet a folyamatfa minden folyamatának elküldi.
Ha a cluster
-t használja, akkor minden munkás (valamint a master) megkapja a jelet. Ha az összes munkást meg akarod szüntetni a SIGHUP
fogadásakor, akkor egy gyakori minta az, hogy a SIGHUP
-t a masterben fogod el, és a SIGTERM
-t továbbítod az összes munkásnak, miközben biztosítod, hogy minden munkás figyelmen kívül hagyja a SIGHUP
-t.
A szkripted leállításának vezérlése
nodemon kill jelet küld az alkalmazásodnak, amikor egy fájlfrissítést lát. Ha a szkripteden belül leállításkor takarításra van szükséged, akkor a kill jelet elfoghatod és magad kezelheted.
A következő példa egyszer figyel a SIGUSR2
jelre (amit a nodemon használ az újraindításhoz), lefuttatja a takarítási folyamatot, majd megöli magát, hogy a nodemon folytathassa az irányítást:
process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});
Megjegyezzük, hogy a process.kill
csak akkor hívódik meg, ha a leállítási munkáid befejeződtek. Le a kalappal Benjie Gillam előtt, aki megírta ezt a technikát.
Események kiváltása, amikor a nodemon állapota megváltozik
Ha growl-szerű értesítéseket akarsz, amikor a nodemon újraindul, vagy egy műveletet akarsz kiváltani, amikor egy esemény történik, akkor vagy require
nodemon, vagy eseményműveleteket adhatsz a nodemon.json
fájlodhoz.
Egy Mac-en például értesítés indításához, amikor a nodemon újraindul, a nodemon.json
így néz ki:
{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}
A rendelkezésre álló események teljes listája az event states wikiben található. Vegye figyelembe, hogy mind állapotokhoz, mind üzenetekhez lehet kötődni.
Kimenet máshová továbbítása
A nodemon használata a gulp munkafolyamatban
Nézze meg a gulp-nodemon bővítményt, hogy integrálja a nodemont a projekt többi gulp munkafolyamatába.
A nodemon használata a Grunt munkafolyamatban
Nézze meg a grunt-nodemon plugint, hogy integrálja a nodemon-t a projekt többi grunt munkafolyamatába.
Kiejtés
nodemon, úgy ejtik: node-mon, no-demon vagy node-e-mon (mint a pokémon)?
Hát… ezt már sokszor megkérdezték tőlem. Nekem tetszik, hogy ezt már megkérdezték tőlem. Voltak fogadkozások, hogy valójában melyikről van szó.
A válasz egyszerű, de talán frusztráló. Nem mondom (hogy én hogyan ejtem ki). Rajtad múlik, hogy úgy hívod, ahogy akarod. Minden válasz helyes 🙂
Tervezési elvek
- A kevesebb zászló jobb
- Működik minden platformon
- Vegényebb funkciók
- Legyen az egyéneknek építsenek a nodemonra
- A teljes CLI funkcionalitást API-ként kínálja
- A hozzájárulásoknak rendelkezniük kell tesztekkel és át kell menniük azokon
A nodemon nem tökéletes, és a CLI érvek túlburjánzottak azon, amivel teljesen elégedett vagyok, de talán egy nap egy kicsit csökkenthető lesz.
GYIK
Nézd meg a GYIK-et, és kérlek add hozzá a saját kérdéseidet, ha úgy gondolod, hogy azok segítenének másoknak.
Támogatók
Köszönjük minden támogatónknak! 🙏
Szponzorok
Támogasd a projektet azzal, hogy szponzor leszel. A logód itt fog megjelenni a honlapodra mutató linkkel együtt. Támogassa ezt a projektet még ma ❤️
Licenc
MIT http://rem.mit-license.org