24.1 npm
npm er pakkastjóri (package manager) fyrir JavaScript en leyfir okkur líka að setja upp og nota allskonar tól sem byggð eru með JavaScript.
Pakkastjóri sér um að sjálfvirknivæða það að setja upp, stilla og fjarlægja hugbúnað. Í staðinn fyrir að þurfa að sækja einhvern hugbúnað, finna hvert við sóttum hann, keyra eitthvað uppsetningarforrit og síðan keyra forritið, þá keyrum við eina skipun og höfum aðgang að forriti.
npm er sett upp með node.js og þurfum við því að setja það upp, en hægt er að nálgast nýjustu útgáfu af node.js á vef þess. Það koma reglulega upp tilvikt þar sem við þurfum að hafa fleiri en eina útgáfu af node.js aðgengilega, þá getum við notað nvm (mac og linux) eða nvm-windows
Eftir að hafa sett upp node.js getum við opnað terminal og staðfest að við höfum aðgang að báðu:
> node -v |
|
v20.7.0 (eða sú útgáfa sem við sóttum) |
|
> npm -v |
|
10.1.0 |
Með node.js og npm uppsett getum við sótt okkur tæki og tól til þess að auðvelda líf okkar í vefforritun. Það eru tvær aðferðir til þess:
- setja tól upp almennt, eða
- setja upp tól sérstaklega í verkefninu okkar
24.2 Almenn tól
Með því að setja upp almennt tól getum við notað það hvar sem er
gegnum terminal.
browser-sync
er dæmi um svona tól, en það leyfir okkur að keyra lítinn vefþjón á
okkar eigin vél og sjálfkrafa endurhlaða síðu þegar við gerum
breytingar sem getur sparað okkur ófáa smellina.
Byrjum á því að setja upp browser-sync
almennt með npm
með því að nota -g
flaggið sem stendur
fyrir „global“.
> npm install -g browser-sync |
|
... |
|
added 153 packages in 5s # eða eitthvað álíka
|
Ef við förum nú í möppu þar sem við höfum index.html
og
styles.css
skjal getum við kveikt á
browser-sync
vefþjóninum með:
> cd /slóð/á/verkefni
|
|
> browser-sync start --server --files index.html styles.css |
|
[Browsersync] Access URLs:
|
|
---------------------------------------- |
|
Local: http://localhost:3000 |
|
External: http://192.168.1.1:3000 |
|
---------------------------------------- |
|
UI: http://localhost:3001 |
|
UI External: http://192.168.1.1:3001 |
|
---------------------------------------- |
|
[Browsersync] Serving files from: ./ |
|
[Browsersync] Watching files... |
nú fylgist browser-sync
með index.html
og
styles.css
og sjálfkrafa endurhleður síðuna. En núna
erum við búin að setja upp þetta tól og getum notað fyrir einhver
verkefni, en hvað ef við viljum leyfa öðrum í teyminu okkar að njóta
þess sama?
24.3 Tól í verkefnum
Með því að innifela tólin sem við notum við þróun á verkefni í verkefninu sjálfu erum við nákvæm um hver dependency okkar eru. Ef aðrir (þar með talið við sjálf eftir einhvern) koma að verkefninu viljum við að allt sé skýrt, hvaða tól sé verið að nota og hvernig. npm getur hjálpað okkur með þetta.
Ef við förum í möppuna þar sem verkefnið okkar er geymt og keyrum
npm init
skipunina sem spyr npm okkur um uplýsingar
varðandi verkefnið okkar. Þær eru síðan geymdar í
package.json
skrá. Við getum síðan bætt sérstaklega við
dependency á ákveðin tól, t.d.
browser-sync
með því að nota
npm install <pakki> --save-dev
en það segir npm
að vista vísun í browser-sync
í
package.json
þar sem browser-sync
er
development dependency. Ef við tilgreinum
--save
erum við að segja að pakkinn sé keyrslu
dependency, þ.e.a.s. til að verkefnið keyri þarf þessi
pakki að vera til.
> cd /slóð/á/verkefni
|
|
> npm init |
|
…svara spurningum |
|
> npm install browser-sync --save-dev |
|
… |
|
added 412 packages in 37.537s # eða eitthvað álíka
|
þá lítur package.json
einhvern vegin svona út:
{
|
|
"name": "prufa",
|
|
"version": "0.0.1",
|
|
"description": "Prufupakki Óla",
|
|
"main": "index.js",
|
|
"scripts": {
|
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
},
|
|
"author": "Óli",
|
|
"license": "ISC",
|
|
"devDependencies": {
|
|
"browser-sync": "^2.26.12"
|
|
}
|
|
}
|
en hún er geymd á json
formi sem er gagnaform sem á
rætur sínar að rekja til JavaScript. Að auki
package.json
verður til
package-lock.json
sem geymir nákvæmar útgáfur þeirra
forrita sem við treystum á, því þau sjálf hafa sín eigin dependency.
./node_modules
er síðan mappa sem verður til samhliða
þessum skrám og geymir hún forritakóða fyrir alla pakka sem við
höfum sett upp. Þessi mappa er útbúin út frá
package.json
og package-lock.json
og þarf
því ekki að geyma hana eða senda með sérstaklega. Við einfaldlega
keyrum npm install
og npm sér um að sækja allt sem
sækja þarf.
En hvernig keyrum við þá browser-sync
?
24.4 npm scripts
npm býður upp á leið til þess að skilgreina skriptur sem
við getum keyrt með npm run <nafn-á-skriptu>
. Við
skilgreinum þessar skriptur undir "scripts"
hlutanum í
package.json
, ef við bætum við skriptu til að keyra
browser-sync
við dæmið að ofan fáum við:
"scripts": {
|
|
"browser-sync": "browser-sync start --server --files index.html styles.css"
|
|
},
|
sérstaklega þarf að passa upp á að hafa ,
á eftir
hverri skriptu ef önnur fylgir og enga kommu í lokin.
Við getum þá keyrt browser-sync
í verkefninu
okkar með:
npm run browser-sync |
og fengið sömu virkni og áður en núna tekur verkefnið okkar skýrt
fram að það noti browser-sync
.
24.5 sass
sass
er þýðandi fyrir Sass skrifaður fyrir node.js sem
við getum sótt með npm.
npm install --save sass |
Með sass
kemur CLI forrit sem
við getum keyrt og gefið slóð á .scss
skrár og nafn á .css
skrá og er þá sass þýtt yfir í
CSS skrá. -w
flag lætur forritið vakta skránna okkar og þýða
hana aftur ef .scss
skrár breytast.
"scripts": {
|
|
"browser-sync": "browser-sync start --server --files index.html styles.css",
|
|
"sass": "sass styles.scss styles.css -w"
|
|
},
|
> npm run sass |
|
=> changed: /slóð/á/verkefni/styles.scss |
|
Rendering Complete, saving .css file... |
|
Wrote CSS to /slóð/á/verkefni/styles.css |
Núna lendum við í því að hafa tvö tól sem við viljum keyra á sama tíma, við því eru tvær lausnir:
- Keyra tvö terminal sem keyra sitthvort command, það getur virkað en verið heldur leiðinlegt í uppsetningu
- Finna annað tól sem leyfir okkur að keyra bæði í einu!
Eitt svona tól er
concurrently
er einn af mörgum pökkum sem leyfir okkur að keyra margar skipanir í
einu. Ef við setjum það upp og keyrum:
> npm install --save-dev concurrently |
og bætum við skriptum
"scripts": {
|
|
"browser-sync": "browser-sync start --server --files index.html styles.css",
|
|
"sass": "sass styles.scss styles.css -w",
|
|
"dev": "concurrently npm:sass npm:sass"
|
|
},
|
og þá getum við keyrt bæði tólin okkar í einu með:
> npm run dev |
Það er venja að hafa skriptu sem heitir eitthvað í áttina að
dev
(fyrir development) til að keyra þróunartól í gang.
Ef við bætum við skriptu sem heitir start
er búist við
að hún keyri upp raunkeyrslu útgáfu (e. production) af verkefninu.
Þá er líka hægt að nota beint npm start
.
24.6 stylelint
Seinasta CSS þróunartólið sem við setjum upp er
stylelint
en eins og nafnið gefur til kynna er það linter fyrir CSS
(og fleiri mál, t.d. Sass). Því fylgja margar reglur sem hægt er að
sér sníða fyrir hvert og eitt verkefni, eða fá ákveðnar
best practices reglur með, t.d.
stylelint-config-primer
sem inniheldur grunnreglur og styður sass.
npm install --save-dev stylelint |
|
npm install --save-dev stylelint-config-primer |
Til þess að kveikja á stylelint-config-primer
reglunum
þurfum við að búa til .stylelintrc
skrá (skrár sem
byrja á .
eru oft notaðar til að geyma stillingar, en
þær geta líka valdið vandræðum þar sem mörg stýrikerfi fela þær)
sem inniheldur:
{
|
|
"extends": "stylelint-config-primer"
|
|
}
|
og bætum við skriptu sem keyrir tólið:
"scripts": {
|
|
"browser-sync": "browser-sync start --server --files index.html styles.css",
|
|
"sass": "sass styles.scss styles.css -w",
|
|
"dev": "npm-run-all --parallel sass browser-sync",
|
|
"lint": "stylelint styles.scss --syntax scss"
|
|
},
|
Ef við núna skrifum sass/css sem ekki er talið gott samkvæmt reglunum sem við höfum valið okkur:
h1 {
|
|
color: red;
|
|
} |
og keyrum lint til að athuga (-s
stendur fyrir
silent, en þá sleppir npm að sýna upplýsingar um keyrslu)
> npm run lint -s |
|
styles.scss |
|
1:1 ✖ Expected "h1" to have no more than 0 type selector-max-type selectors
|
|
3:10 ✖ Unexpected named color "red" color-named
|
Þegar við vinnum í verkefnum í teymi, þar sem ákveðnar reglur um kóðastíl hafa verið skilgreindar förum við eftir þeim til að halda samræmi. Við erum e.t.v. ekki alltaf sammála reglunum, en við treystum því að það séu góðar ástæður þar að baki, eða ræðum við teymið okkar um að breyta þeim.
Allar reglur sem hægt er að stilla í Stylelint
má nálgast á vefnum. Ef við viljum breyta því hvernig regla virkar getum við stillt
hana sérstaklega í .stylelintrc
, t.d.
banna tómar athugasemdir:
{
|
|
"extends": "stylelint-config-primer",
|
|
"rules": {
|
|
"comment-no-empty": true
|
|
}
|
|
}
|
Það geta þó komið upp aðstæður þar sem við viljandi brjótum almenna
reglu fyrir sértækt tilvik. T.d. viljum við setja letur á
html
en Stylelint vill ekki að við notum type-selector.
Við getum þá slökkt á athugun á þeirri línu með
/* stylelint-disable-line */
(einnig
hægt að slökkva á fleiri vegu).