nodemon on työkalu, joka auttaa node.js-pohjaisten sovellusten kehittämisessä käynnistämällä node-sovelluksen automaattisesti uudelleen, kun hakemistossa havaitaan tiedostomuutoksia.

nodemon ei vaadi lisämuutoksia koodiin tai kehitysmenetelmään. nodemon on korvaava kääre node:lle. Jos haluat käyttää nodemon:tä, korvaa komentorivillä sana node suorittaessasi skriptiäsi.

Asennus

Joko kloonaamalla git:llä tai käyttämällä npm:ää (suositeltavin tapa):

npm install -g nodemon

Nodemon asennetaan globaalisti järjestelmäpolkuusi.

Voit asentaa nodemon myös kehitysriippuvuutena:

npm install --save-dev nodemon

Lokaalilla asennuksella nodemon ei ole saatavilla järjestelmäpolussasi. Sen sijaan nodemon paikallinen asennus voidaan ajaa kutsumalla sitä npm-skriptin sisältä (kuten npm start) tai käyttämällä npx nodemon.

Käyttö

nodemon kietoo sovelluksesi, joten voit välittää kaikki argumentit, jotka normaalisti välittäisit sovelluksellesi:

nodemon 

Liittymän CLI-optioita varten käytä -h (tai --help) -argumenttia:

nodemon -h

Nodemon käyttö on yksinkertaista, jos sovellukseni hyväksyisi argumentteina hostin ja portin, käynnistäisin sen näin:

nodemon ./server.js localhost 8080

Tämän skriptin ulostulon etuliite on , muuten kaikki sovelluksesi ulostulot, virheet mukaan luettuina, kaikuuntuvat odotetusti.

Jos komentosarjaa ei ole annettu, nodemon testaa package.json-tiedoston ja jos se löytyy, se suorittaa pääominaisuuteen (ref) liittyvän tiedoston.

Voit myös välittää inspect-lipun nodemonille komentorivin kautta kuten normaalisti:

nodemon --inspect ./server.js 80

Jos sovelluksellesi on package.json-tiedosto, voit jättää main-skriptin kokonaan pois ja nodemon lukee package.json:n main-ominaisuudelle main ja käyttää sitä arvoa sovelluksena.

nodemon etsii myös scripts.start-ominaisuutta package.json:stä (nodemon 1.1.x:stä lähtien).

Katso myös nodemonin usein kysytyt kysymykset (FAQ) tai ongelmat.

Automaattinen uudelleenkäynnistys

nodemon kirjoitettiin alunperin käynnistämään roikkuvia prosesseja, kuten web-palvelimia, mutta nyt se tukee sovelluksia, jotka poistuvat siististi. Jos skriptisi poistuu siististi, nodemon jatkaa hakemiston (tai hakemistojen) tarkkailua ja käynnistää skriptin uudelleen, jos siinä tapahtuu muutoksia.

Manuaalinen uudelleenkäynnistys

Kun nodemon on käynnissä, jos haluat käynnistää sovelluksesi manuaalisesti uudelleen, voit pysäyttämisen ja nodemonin uudelleenkäynnistämisen sijasta kirjoittaa rs rivinvaihdon kanssa, ja nodemon käynnistää prosessisi uudelleen.

Konfigurointitiedostot

nodemon tukee paikallisia ja globaaleja konfigurointitiedostoja. Näiden nimi on yleensä nodemon.json ja ne voivat sijaita nykyisessä työhakemistossa tai kotihakemistossasi. Vaihtoehtoinen paikallinen konfiguraatiotiedosto voidaan määritellä --config <file>-valinnalla.

Erityisyys on seuraava, joten komentoriviargumentti ohittaa aina config-tiedoston asetukset:

  • komentoriviargumentit
  • local config
  • global config

Config-tiedosto voi ottaa minkä tahansa komentoriviargumentin käyttöönsä JSON-avainarvoina, esim:

{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}

Yllä oleva nodemon.json-tiedosto voi olla minun globaali configini, jotta minulla on tuki ruby-tiedostoille ja käsittelytiedostoille, ja voin ajaa nodemon demo.pde ja nodemon tietää automaattisesti, miten skripti ajetaan, vaikka out of the box tukee käsittelyskriptejä.

Lisäesimerkki asetuksista on nähtävissä osoitteessa sample-nodemon.md

package.json

Jos haluat pitää kaikki pakettien konfiguraatiot yhdessä paikassa, nodemon tukee package.json:n käyttämistä konfigurointiin.Määritä konfiguraatio samassa muodossa kuin konfiguraatiotiedostossa, mutta nodemonConfig:n alla package.json-tiedostossa, ota esimerkiksi seuraava package.json:

{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}

Huomaa, että jos määrität --config-tiedoston tai annat paikallisen nodemon.json:n, kaikki package.json-konfiguraatiot jätetään huomiotta.

Tämä osio kaipaa parempaa dokumentaatiota, mutta toistaiseksi voit katsoa myös nodemon --help config (myös täällä).

nodemon käyttäminen moduulina

Katso doc/requireable.md

nodemon käyttäminen lapsiprosessina

Katso doc/events.md

Muiden kuin nodemon-skriptien suorittaminen

nodemonia voidaan käyttää myös muiden ohjelmien suorittamiseen ja valvontaan. nodemon lukee suoritettavan skriptin tiedostopäätteen ja tarkkailee sitä .js:n sijasta, jos sitä ei ole nodemon.json:

nodemon --exec "python -v" ./app.py

Nyt nodemon suorittaa app.py pythonin kanssa sanallisessa tilassa (huomaa, että jos et välitä args:eja exec-ohjelmalle, lainausmerkkejä ei tarvita) ja etsii uusia tai muutettuja tiedostoja, joilla on .py-pääte.

Oletusarvoiset suoritettavat tiedostot

Käyttämällä nodemon.json-konfigurointitiedostoa voit määritellä omat oletusarvoiset suoritettavat tiedostot käyttämällä execMap-ominaisuutta. Tämä on erityisen hyödyllistä, jos työskentelet kielellä, jota nodemon ei oletusarvoisesti tue.

Lisätäksesi tuen nodemonille, jotta se tietäisi .pl-laajennuksen (Perlille), nodemon.json-tiedostoon lisättäisiin:

{ "execMap": { "pl": "perl" }}

Nyt kun suoritat seuraavaa, nodemon tietää käyttää suoritettavana tiedostona perl:

nodemon script.pl

Yleisesti suositellaan käyttämään globaalia nodemon.json-tiedostoa, jotta voit käyttää omia execMap-asetuksia. Jos kuitenkin jokin yleinen oletusarvo puuttuu, se voidaan sulauttaa projektiin niin, että nodemon tukee sitä oletusarvoisesti, muuttamalla default.js:ää ja lähettämällä pull request.

Useiden hakemistojen valvonta

Oletusarvoisesti nodemon valvoo nykyistä työhakemistoa. Jos haluat ottaa tämän vaihtoehdon hallintaasi, käytä --watch-vaihtoehtoa lisätäksesi tietyt polut:

nodemon --watch app --watch libs app/server.js

Nyt nodemon käynnistyy uudelleen vain, jos hakemistossa ./app tai ./libs tapahtuu muutoksia. Oletusarvoisesti nodemon käy läpi alihakemistot, joten alihakemistoja ei tarvitse sisällyttää eksplisiittisesti.

Ei kannata käyttää unix-globbingia useiden hakemistojen välittämiseen, esim. --watch ./lib/*, se ei toimi. Tarvitaan --watch-lippu jokaista tarkkailtavaa hakemistoa kohden.

Laajennusten tarkkailulistan määrittäminen

nodemon -e js,pug

Nyt nodemon käynnistyy uudelleen, kun hakemistossa (tai alihakemistoissa) oleviin tiedostoihin, joilla on laajennukset .js, .pug, tehdään muutoksia.

Tiedostojen huomioimatta jättäminen

Oletusarvoisesti nodemon käynnistyy uudelleen vain, kun .js JavaScript-tiedosto muuttuu. Joissakin tapauksissa haluat jättää huomiotta tietyt tiedostot, hakemistot tai tiedostokuviot, jotta nodemon ei käynnistäisi sovellusta ennenaikaisesti uudelleen.

Tämä voidaan tehdä komentorivin kautta:

nodemon --ignore lib/ --ignore tests/

Tai tietyt tiedostot voidaan jättää huomioimatta:

nodemon --ignore lib/app.js

Kuviot voidaan myös jättää huomioimatta (mutta muista lainata argumentit):

nodemon --ignore 'lib/*.js'

Huomaa, että nodemon jättää oletusarvoisesti huomiotta hakemistot .git, node_modules, bower_components, .nyc_output, coverage ja .sass-cache ja lisää huomiotta jättämäsi mallit luetteloon. Jos haluat todella tarkkailla hakemistoa, kuten node_modules, sinun täytyy ohittaa taustalla olevat oletusarvoiset ignore-säännöt.

Application isn’t restarting

Joskus verkkoympäristöissä (kuten kontti, jossa nodemon käyttää nodemonia lukemassa liitetyn aseman yli) sinun täytyy käyttää legacyWatch: true, joka ottaa käyttöön Chokidarin kyselyn.

Käytä CLI:n kautta lyhyesti joko --legacy-watch tai -L:

nodemon -L

Tämän tulisi tosin olla viimeinen keino, sillä se pollaa jokaisen löytämänsä tiedoston.

Uudelleenkäynnistyksen viivästyttäminen

Joissain tilanteissa voit haluta odottaa, kunnes useat tiedostot ovat muuttuneet. Aikakatkaisu ennen uusien tiedostomuutosten tarkistamista on 1 sekunti. Jos lataat useita tiedostoja ja siihen kuluu jonkin verran sekunteja, tämä voi aiheuttaa sovelluksen uudelleenkäynnistymisen useita kertoja tarpeettomasti.

Lisätäksesi ylimääräisen kuristusajan tai viivästyttääksesi uudelleenkäynnistymistä voit käyttää komentoa --delay:

nodemon --delay 10 server.js

Lisätäksesi tarkkuutta voidaan määrittää millisekuntia. Joko liukulukuna:

nodemon --delay 2.5 server.js

Vai käyttämällä aikamääritettä (ms):

nodemon --delay 2500ms server.js

Viiveen luku on niiden sekuntien (tai millisekuntien, jos määritetty) määrä, jotka viivytetään ennen uudelleenkäynnistystä. Joten nodemon käynnistää sovelluksesi uudelleen vasta annetun määrän sekunteja viimeisen tiedostomuutoksen jälkeen.

Jos asetat tämän arvon kohdassa nodemon.json, arvo tulkitaan aina millisekunteina. Esim, seuraavat vastaavat:

nodemon --delay 2.5{ "delay": "2500"}

Gracefully reloading down your script

On mahdollista saada nodemon lähettämään mikä tahansa määrittelemäsi signaali sovelluksellesi.

nodemon --signal SIGHUP server.js

Sovelluksesi voi käsitellä signaalia seuraavasti.

process.once("SIGHUP", function () { reloadSomeConfiguration();})

Huomaa, että nodemon lähettää tämän signaalin jokaiselle prosessipuun prosessille.

Jos käytät cluster, jokainen työläinen (sekä master) saa signaalin. Jos haluat lopettaa kaikki työläiset SIGHUP:n saatuasi, yleinen malli on ottaa SIGHUP kiinni masterissa ja välittää SIGTERM kaikille työläisille varmistaen samalla, että kaikki työläiset jättävät SIGHUP huomioimatta.

Skriptisi sammuttamisen kontrollointi

nodemon lähettää kill-signaalin sovelluksellesi, kun se näkee tiedoston päivityksen. Jos sinun täytyy siivota skriptisi sisällä tapahtuvan sammutuksen yhteydessä, voit kaapata kill-signaalin ja käsitellä sen itse.

Seuraava esimerkki kuuntelee kerran SIGUSR2-signaalia (jota nodemon käyttää uudelleenkäynnistykseen), suorittaa siivousprosessin ja tappaa sitten itsensä, jotta nodemon voi jatkaa hallintaa:

process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});

Huomaa, että komentoa process.kill kutsutaan vasta, kun sammutustyösi ovat valmiit. Hat tip Benjie Gillamille tämän tekniikan kirjoittamisesta.

Tapahtumien laukaiseminen nodemon-tilan muuttuessa

Jos haluat growl-tyyppisiä ilmoituksia, kun nodemon käynnistyy uudelleen, tai laukaista toiminnon, kun jokin tapahtuma tapahtuu, voit joko require nodemonilla tai lisätä tapahtumatoimintoja nodemon.json-tiedostoosi.

Jos haluat esimerkiksi laukaista ilmoituksen Macilla, kun nodemon käynnistyy uudelleen, nodemon.json näyttää tältä:

{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}

Täydellinen luettelo käytettävissä olevista tapahtumista on lueteltu tapahtumatilojen wikissä. Huomaa, että voit sitoutua sekä tiloihin että viesteihin.

Pipe output to somewhere else

nodemon käyttäminen gulp-työnkulussa

Katso gulp-nodemon-lisäosa, jolla voit integroida nodemon muuhun projektisi gulp-työnkulkuun.

nodemonin käyttäminen Grunt-työnkulussa

Tutustu grunt-nodemon-lisäosaan integroidaksesi nodemon muuhun projektisi grunt-työnkulkuun.

Ääntäminen

Nodemon, lausutaanko se: node-mon, no-demon vai node-e-mon (kuten pokémon)?

Noh… Minulta on kysytty tätä monta kertaa aiemmin. Pidän siitä, että minulta on kysytty tätä ennenkin. On veikattu, kumpi se oikeasti on.

Vastaus on yksinkertainen, mutta mahdollisesti turhauttava. En sano (miten lausun sen). Se on sinun asiasi kutsua sitä niin kuin haluat. Kaikki vastaukset ovat oikein 🙂

Suunnitteluperiaatteet

  • Vähäisemmät liput on parempi
  • Toimii kaikilla alustoilla
  • Vähäisemmät ominaisuudet
  • Jätä yksilöt rakentaa nodemonin päälle
  • Tarjoa kaikki CLI-toiminnallisuudet API:na
  • Kontribuutioilla on oltava ja niiden on läpäistävä testit

Nodemon ei ole täydellinen, ja CLI-argumentit ovat levinneet pidemmälle kuin mihin olen täysin tyytyväinen, mutta ehkä sitä voidaan jonain päivänä hieman vähentää.

Usein kysytyt kysymykset

Katsokaa usein kysytyt kysymykset ja lisätkää omia kysymyksiänne, jos luulette niiden auttavan muita.

Tukijat

Kiitos kaikille tukijoillemme! 🙏

Sponsorit

Tue tätä projektia ryhtymällä sponsoriksi. Logosi näkyy täällä linkin kanssa verkkosivuillesi. Sponsoroi tätä projektia jo tänään ❤️

Lisenssi

MIT http://rem.mit-license.org

Vastaa

Sähköpostiosoitettasi ei julkaista.