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

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.