Tekijä valitsi Open Internet/Free Speech Fund -rahaston saamaan lahjoituksen osana Write for DOnations -ohjelmaa.
Esittely
Node.js:ssä moduuli on kokoelma JavaScriptiä sisältäviä funktioita ja objekteja, joita ulkoiset sovellukset voivat käyttää. Koodinpätkän kuvaaminen moduuliksi viittaa vähemmän siihen, mitä koodi on, ja enemmän siihen, mitä se tekee – mitä tahansa Node.js-tiedostoa tai tiedostojen kokoelmaa voidaan pitää moduulina, jos sen funktiot ja tiedot saatetaan ulkopuolisten ohjelmien käyttöön.
Koska moduulit tarjoavat toiminnallisuuden yksiköitä, joita voidaan käyttää uudelleen monissa suuremmissa ohjelmissa, ne mahdollistavat löyhästi kytkeytyneiden sovellusten luomisen, jotka skaalautuvat monimutkaisuuden myötä, ja ne avaavat sinulle mahdollisuuden jakaa koodisi muiden kehittäjien kanssa. Kun pystyt kirjoittamaan moduuleja, jotka vievät hyödyllisiä toimintoja ja tietoja, voit osallistua laajempaan Node.js-yhteisöön – itse asiassa kaikki npm:ssä käyttämäsi paketit on niputettu ja jaettu moduuleina. Tämä tekee moduulien luomisesta olennaisen taidon Node.js-kehittäjälle.
Tässä opetusohjelmassa luot Node.js-moduulin, joka ehdottaa, mitä väriä web-kehittäjien tulisi käyttää suunnittelussaan. Kehität moduulin tallentamalla värit matriisiksi ja tarjoamalla funktion, joka hakee yhden värin satunnaisesti. Sen jälkeen käyt läpi eri tapoja tuoda moduuli Node.js-sovellukseen.
Edellytykset
- Tarvitset Node.js:n ja npm:n asennettuna kehitysympäristöösi. Tässä opetusohjelmassa käytetään versiota 10.17.0. Jos haluat asentaa tämän macOS:lle tai Ubuntu 18.04:lle, noudata ohjeita kohdassa Node.js:n asentaminen ja paikallisen kehitysympäristön luominen macOS:lle tai kohdassa Asennus PPA:n avulla kohdassa Node.js:n asentaminen Ubuntu 18.04:lle. Kun olet asentanut Node.js:n, sinulla on myös npm asennettuna; tässä ohjeessa käytetään versiota 6.11.3.
- Sinun pitäisi tuntea myös
package.json
-tiedosto, ja kokemus npm-komennoista olisi myös hyödyllistä. Tämän kokemuksen hankkimiseksi seuraa How To Use Node.js Modules with npm and package.json -komentoja, erityisesti vaihetta 1 –package.json
-tiedoston luominen. - Auttaisi myös tuntea hyvin Node.js:n REPL (Read-Evaluate-Print-Loop). Käytät tätä moduulisi testaamiseen. Jos tarvitset lisätietoja tästä, lue oppaamme How To Use the Node.js REPL.
Vaihe 1 – Moduulin luominen
Tässä vaiheessa opastamme sinua luomaan ensimmäisen Node.js-moduulisi. Moduulisi sisältää kokoelman värejä matriisissa ja tarjoaa funktion, jolla saat yhden värin satunnaisesti. Käytät Node.js:n sisäänrakennettua exports
-ominaisuutta, jotta funktio ja array ovat ulkoisten ohjelmien käytettävissä.
Aluksi päätät, mitä tietoja väreistä tallennat moduuliin. Jokainen väri tulee olemaan objekti, joka sisältää name
-ominaisuuden, jonka ihmiset voivat helposti tunnistaa, ja code
-ominaisuuden, joka on merkkijono, joka sisältää HTML-värikoodin. HTML-värikoodit ovat kuusinumeroisia heksadesimaalilukuja, joiden avulla voit muuttaa verkkosivun elementtien väriä. Voit oppia lisää HTML-värikoodeista lukemalla tämän HTML-värikoodit ja nimet -artikkelin.
Sitten päätät, mitä värejä haluat tukea moduulissasi. Moduulisi sisältää matriisin nimeltä allColors
, joka sisältää kuusi väriä. Moduulisi sisältää myös funktion nimeltä getRandomColor()
, joka valitsee satunnaisesti värin matriisista ja palauttaa sen.
Tee päätelaitteessasi uusi kansio nimeltä colors
ja siirry siihen:
- mkdir colors
- cd colors
Initialisoi npm, jotta muut ohjelmat voivat tuoda tämän moduulin myöhemmin opetusohjelmassa:
- npm init -y
Käytit lippua -y
ohittaaksesi tavanomaiset kehotukset package.json
:n mukauttamiseksi. Jos tämä olisi moduuli, jonka haluaisit julkaista npm:ään, vastaisit kaikkiin näihin kehotteisiin asiaankuuluvilla tiedoilla, kuten selitetään kohdassa Kuinka käyttää Node.js-moduuleja npm:n ja package.jsonin avulla.
Tässä tapauksessa tulosteesi on:
Output{ "name": "colors", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC"}
Avaa nyt komentorivin tekstieditori, kuten nano
, ja luo uusi tiedosto, joka toimii moduulisi sisääntulon lähteenä:
- nano index.js
Moduulisi tulee tekemään muutamia asioita. Ensinnäkin määrittelet Color
-luokan. Color
-luokkaasi instantioidaan sen nimi ja HTML-koodi. Lisää seuraavat rivit luodaksesi luokan:
class Color { constructor(name, code) { this.name = name; this.code = code; }}
Nyt kun sinulla on Color
:n tietorakenne, lisää moduuliisi muutamia instansseja. Kirjoita tiedostoosi seuraava korostettu array:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;
Kirjoita lopuksi funktio, joka valitsee sattumanvaraisesti kohteen äsken luomastasi allColors
-massasta:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;exports.getRandomColor = () => { return allColors;}exports.allColors = allColors;
Avainsanalla exports
viitataan globaaliin objektiin, joka on käytettävissä jokaisessa Node.js-moduulissa. Kaikki moduulin exports
-objektiin tallennetut funktiot ja objektit paljastuvat, kun muut Node.js-moduulit tuovat sitä. Esimerkiksi getRandomColor()
-funktio luotiin suoraan exports
-objektiin. Tämän jälkeen lisäsit exports
-objektiin allColors
-ominaisuuden, joka viittaa aiemmin skriptissä luotuun paikalliseen vakiojoukkoon allColors
.
Kun muut moduulit tuovat tämän moduulin, sekä allColors
että getRandomColor()
ovat alttiina ja käytettävissä.
Tallenna ja poistu tiedostosta.
Luotuasi tähän mennessä moduulin olet luonut moduulin, jossa on joukko värejä, sekä funktio, joka palauttaa yhden värin satunnaisesti. Olet myös vienyt matriisin ja funktion, jotta ulkoiset ohjelmat voivat käyttää niitä. Seuraavassa vaiheessa käytät moduuliasi muissa sovelluksissa havainnollistaaksesi export
:n vaikutuksia.
Vaihe 2 – Moduulisi testaaminen REPL:llä
Ennen kuin rakennat kokonaisen sovelluksen, käytä hetki aikaa varmistaaksesi, että moduulisi toimii. Tässä vaiheessa käytät REPL:ää colors
-moduulin lataamiseen. Kun olet REPL:ssä, kutsut getRandomColor()
-funktiota nähdäksesi, käyttäytyykö se odotetulla tavalla.
Aloita Node.js REPL samassa kansiossa kuin index.js
-tiedosto:
- node
Kun REPL on käynnistynyt, näet >
-kehotteen. Tämä tarkoittaa, että voit syöttää JavaScript-koodia, joka arvioidaan välittömästi. Jos haluat lukea tästä lisää, seuraa opastustamme REPL:n käytöstä.
Syötä ensin seuraava:
- colors = require('./index');
Tässä komennossa require()
lataa colors
-moduulin colors
sen tulokohtaan. Kun painat ENTER
, saat:
Output{ getRandomColor: , allColors: }
REPL näyttää meille colors
:n arvon, joka on kaikki index.js
-tiedostosta tuodut funktiot ja objektit. Kun käytät require
-avainsanaa, Node.js palauttaa kaiken moduulin exports
-objektin sisällä olevan sisällön.
Muista, että lisäsit colors
-moduulissa exports
:een getRandomColor()
ja allColors
. Tästä syystä näet ne molemmat REPL:ssä, kun ne tuodaan.
Kokeile kehotteessa getRandomColor()
-funktiota:
- colors.getRandomColor();
Sinulle kysytään satunnaista väriä:
OutputColor { name: 'groovygray', code: '#D7DBDD' }
Koska indeksi on satunnainen, tulostuksesi voi vaihdella. Nyt kun olet varmistanut, että colors
-moduuli toimii, poistu Node.js REPL:stä:
- .exit
Tällöin palaat päätelaitteen komentoriville.
Olet juuri varmistanut, että moduulisi toimii odotetusti REPL:n avulla. Seuraavaksi sovellat näitä samoja käsitteitä ja lataat moduulisi sovellukseen, kuten tekisit oikeassa projektissa.
Vaihe 3 – Paikallisen moduulisi tallentaminen riippuvuutena
Testaillessasi moduuliasi REPL:ssä, toit sen suhteellisella polulla. Tämä tarkoittaa, että käytit tiedoston index.js
sijaintia suhteessa työhakemistoon saadaksesi sen sisällön. Vaikka tämä toimii, on yleensä parempi ohjelmointikokemus tuoda moduulit niiden nimillä, jotta tuonti ei katkea, kun kontekstia muutetaan. Tässä vaiheessa asennat colors
-moduulin npm:n local module install
-ominaisuudella.
Aseta uusi Node.js-moduuli colors
-kansion ulkopuolelle. Mene ensin edelliseen hakemistoon ja luo uusi kansio:
- cd ..
- mkdir really-large-application
Siirry nyt uuteen projektiisi:
- cd really-large-application
Kuten myös colors
-moduulin kohdalla, aloita kansiosi npm:llä:
- npm init -y
Seuraava package.json
luodaan:
Output{ "name": "really-large-application", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC"}
Asenna nyt colors
-moduulisi ja käytä --save
-lippua, jotta se tallentuu package.json
-tiedostoosi:
- npm install --save ../colors
Asensit juuri colors
-moduulisi uuteen projektiin. Avaa package.json
-tiedosto nähdäksesi uuden paikallisen riippuvuuden:
- nano package.json
Havaitset, että seuraavat korostetut rivit on lisätty:
{ "name": "really-large-application", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC", "dependencies": { "colors": "file:../colors" }}
Käynnistä tiedosto.
Moduuli colors
kopioitiin hakemistoosi node_modules
. Varmista, että se on siellä seuraavalla komennolla:
- ls node_modules
Tämä antaa seuraavan tulosteen:
Outputcolors
Käytä asennettua paikallista moduulia tässä uudessa ohjelmassa. Avaa tekstieditori uudelleen ja luo toinen JavaScript-tiedosto:
- nano index.js
Ohjelmasi tuo ensin colors
-moduulin. Sen jälkeen se valitsee värin satunnaisesti käyttäen moduulin tarjoamaa getRandomColor()
-funktiota. Lopuksi se tulostaa konsoliin viestin, joka kertoo käyttäjälle, mitä väriä käytetään.
Syötä seuraava koodi tiedostoon index.js
:
const colors = require('colors');const chosenColor = colors.getRandomColor();console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);
Tallenna ja poistu tästä tiedostosta.
Sovelluksesi kertoo nyt käyttäjälle satunnaisen värivaihtoehdon verkkosivuston komponentille.
Ajoita tämä skripti:
- node index.js
Tulosteesi on samanlainen kuin:
OutputYou should use leafygreen on your website. It's HTML code is #48C9B0
Olet nyt onnistuneesti asentanut colors
-moduulin ja voit hallita sitä kuten mitä tahansa projektissasi käytettävää npm-pakettia. Jos kuitenkin lisäät lisää värejä ja toimintoja paikalliseen colors
-moduuliin, sinun on ajettava npm update
sovelluksissasi, jotta voit käyttää uusia vaihtoehtoja. Seuraavassa vaiheessa käytät paikallista colors
-moduulia toisella tavalla ja saat automaattisia päivityksiä, kun moduulin koodi muuttuu.
Vaihe 4 – Paikallisen moduulin linkittäminen
Jos paikallista moduulia kehitetään kovaa vauhtia, pakettien jatkuva päivittäminen voi olla työlästä. Vaihtoehtona olisi moduulien linkittäminen. Moduulin linkittäminen varmistaa, että kaikki moduulin päivitykset näkyvät välittömästi sitä käyttävissä sovelluksissa.
Tässä vaiheessa linkität colors
-moduulin sovellukseesi. Muokkaat myös colors
-moduulia ja varmistat, että sen viimeisimmät muutokset toimivat sovelluksessa ilman, että sitä tarvitsee asentaa tai päivittää uudelleen.
Poista ensin paikallinen moduuli:
- npm un colors
npm linkittää moduuleja käyttämällä symbolisia linkkejä (tai symbolic links eli symbolilinkkejä), jotka ovat viitteitä, jotka osoittavat tietokoneessa oleviin tiedostoihin tai hakemistoihin. Moduulin linkittäminen tapahtuu kahdessa vaiheessa:
- Luo moduuliin globaalin linkin. npm luo symlinkin globaalin
node_modules
hakemistosi ja moduulisi hakemiston välille. Globaalinode_modules
-hakemisto on sijainti, johon kaikki järjestelmän laajuiset npm-paketit on asennettu (kaikki paketit, jotka asennat-g
-lippukkeella). - Lokaalin linkin luominen. npm luo symlinkki moduulia käyttävän paikallisen projektisi ja moduulin globaalin linkin välille.
Luo ensin globaali linkki palaamalla colors
-kansioon ja käyttämällä komentoa link
:
- cd ../colors
- sudo npm link
Kun se on valmis, komentotulkkisi antaa tulosteen:
Output/usr/local/lib/node_modules/colors -> /home/sammy/colors
Loit juuri symlinkin node_modules
-kansiossasi colors
-hakemistoosi.
Palaa really-large-application
-kansioon ja linkitä paketti:
- cd ../really-large-application
- sudo npm link colors
Saat seuraavan kaltaisen tulosteen:
Output/home/sammy/really-large-application/node_modules/colors -> /usr/local/lib/node_modules/colors -> /home/sammy/colors
Huomautus: Jos haluat kirjoittaa hiukan vähemmän, voit käyttää link
:n sijasta ln
. Esimerkiksi npm ln colors
olisi toiminut täsmälleen samalla tavalla.
Kuten tulosteesta näkyy, olet juuri luonut symlinkin really-large-application
:n paikallisesta node_modules
-hakemistosta globaalissa node_modules
:ssä olevaan symlinkkiin colors
, joka osoittaa varsinaiseen hakemistoon, jossa colors
-moduuli on.
Linkitysprosessi on valmis. Suorita tiedostosi varmistaaksesi, että se edelleen toimii:
- node index.js
Tulosteesi on samankaltainen kuin:
OutputYou should use sunkissedyellow on your website. It's HTML code is #F4D03F
Ohjelmasi toiminnallisuus on tallella. Testaa seuraavaksi, että päivitykset otetaan välittömästi käyttöön. Avaa tekstieditorissa uudelleen index.js
-tiedosto colors
-moduulissa:
- cd ../colors
- nano index.js
Lisää nyt funktio, joka valitsee parhaan mahdollisen sinisen sävyn. Se ei ota argumentteja ja palauttaa aina allColors
-joukon kolmannen kohteen. Lisää nämä rivit tiedoston loppuun:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;exports.getRandomColor = () => { return allColors; }exports.allColors = allColors;exports.getBlue = () => { return allColors;}
Tallenna ja poistu tiedostosta ja avaa sitten uudelleen index.js
-tiedosto kansiossa really-large-application
:
- cd ../really-large-application
- nano index.js
Tehdään kutsu äsken luotuun getBlue()
-funktioon ja tulostetaan lause, jossa on värin ominaisuudet. Lisää nämä lausekkeet tiedoston loppuun:
const colors = require('colors');const chosenColor = colors.getRandomColor();console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);const favoriteColor = colors.getBlue();console.log(`My favorite color is ${favoriteColor.name}/${favoriteColor.code}, btw`);
Tallenna ja poistu tiedostosta.
Koodi käyttää nyt juuri luotua getBlue()
-funktiota. Suorita tiedosto kuten ennenkin:
- node index.js
Saat tulosteen kuten:
OutputYou should use brightred on your website. It's HTML code is #E74C3CMy favorite color is skyblue/#5DADE2, btw
Skriptisi pystyi käyttämään colors
-moduulisi uusinta funktiota ilman, että sinun olisi tarvinnut ajaa npm update
. Tämä helpottaa muutosten tekemistä tähän sovellukseen kehityksessä.
Kirjoittaessasi suurempia ja monimutkaisempia sovelluksia mieti, miten toisiinsa liittyvää koodia voidaan ryhmitellä moduuleihin ja miten haluat, että nämä moduulit asetetaan. Jos moduuliasi käytetään vain yhdessä ohjelmassa, se voi pysyä samassa projektissa ja siihen voidaan viitata suhteellisen polun avulla. Jos moduulisi jaetaan myöhemmin erikseen tai se on hyvin eri paikassa kuin projekti, jonka parissa nyt työskentelet, asentaminen tai linkittäminen voi olla järkevämpää. Aktiivisessa kehityksessä olevat moduulit hyötyvät myös linkittämisen tarjoamista automaattisista päivityksistä. Jos moduuli ei ole aktiivisessa kehityksessä, npm install
:n käyttäminen voi olla helpompi vaihtoehto.
Johtopäätös
Tässä opetusohjelmassa opit, että Node.js-moduuli on JavaScript-tiedosto, joka sisältää funktioita ja objekteja, joita muut ohjelmat voivat käyttää. Tämän jälkeen loit moduulin ja liitit funktiot ja objektit globaaliin exports
-objektiin, jotta ne olisivat ulkoisten ohjelmien käytettävissä. Lopuksi toit tuon moduulin ohjelmaan ja havainnollistit, miten moduulit yhdistyvät suuremmiksi sovelluksiksi.
Nyt kun tiedät, miten moduuleja luodaan, mieti, minkälaisen ohjelman haluat kirjoittaa, ja jaa se eri osiin pitäen kukin yksilöllinen joukko toimintoja ja tietoja omissa moduuleissaan. Mitä enemmän harjoittelet moduulien kirjoittamista, sitä paremmin pystyt kirjoittamaan laadukkaita Node.js-ohjelmia oppimismatkallasi. Jos haluat käydä läpi esimerkin moduuleja käyttävästä Node.js-sovelluksesta, katso How To Set Up a Node.js Application for Production on Ubuntu 18.04 -oppaamme.