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
- Käyttö
- Automaattinen uudelleenkäynnistys
- Manuaalinen uudelleenkäynnistys
- Konfigurointitiedostot
- package.json
- nodemon käyttäminen moduulina
- nodemon käyttäminen lapsiprosessina
- Muiden kuin nodemon-skriptien suorittaminen
- Oletusarvoiset suoritettavat tiedostot
- Useiden hakemistojen valvonta
- Laajennusten tarkkailulistan määrittäminen
- Tiedostojen huomioimatta jättäminen
- Application isn’t restarting
- Uudelleenkäynnistyksen viivästyttäminen
- Gracefully reloading down your script
- Skriptisi sammuttamisen kontrollointi
- Tapahtumien laukaiseminen nodemon-tilan muuttuessa
- Pipe output to somewhere else
- nodemon käyttäminen gulp-työnkulussa
- nodemonin käyttäminen Grunt-työnkulussa
- Ääntäminen
- Suunnitteluperiaatteet
- Usein kysytyt kysymykset
- Tukijat
- Sponsorit
- Lisenssi
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