Figyelem: ha bármit parancssorba másolunk copy-paste megoldással, akkor a parancssorban vagy a fejlesztői felület fájljában a ” és a – és a −− karatkereket írjuk újra át kézzel a saját billentyűzetről, különben valamilyen karakterkódolási probléma miatt hibára futunk!
Modul: ha egy utasítássorozat többször is előfordul egy programban, akkor azt a kódrészletet egy külön fájlba szervezzük ki, amely minden más fájl számára hozzáférhető lesz a megfelelő kulcsszavak használatával. A modul tehát egy külön fájlba elhelyezett kódrészlet. Ezeket a modulokat lehet exportálni és importálni. Azaz egy modul több másik modult is importálhat.
Webpack: a webpack egy module bundler (bundle:csomag), amely a modulokból (itt modulnak számítanak a képek, CSS fájlok, JavaSript fájlok) és a feltelepített npm csomagokból egy bundle-t (csomagot) hoz létre. A webpack figyelembe veszi, hogy mi mit tölt be, így elkerüli a duplikációt, hiszen figyeli, hogy egy csomagot betöltöttünk-e már. A nem használt CSS és JavaScript kódokat is képes kezelni, így rövidebb kódot generál.
A használatához telepítve kell hogy legyen a node és az npm. Ellenőrzése parancssorból: node –version; npm –version;
mappa létrehozása; package.json létrehozása: npm init; ha nincs js fájl, akkor az index.js-t tekinti entry point-nak (package.json-ben „main” key); installálni kell: (itt bugos a WordPress: a parancssor nem tudja értelmezni az innen kimásolt ‐‐ jelet, ezért azt írjuk át a billenytűzetről a parancssorban: ‐‐save-dev) npm install ‐‐save-dev webpack webpack-cli webpack-dev-server copy-webpack-plugin css-loader style-loader; (webpack-cli: command line interface a webpack-hoz; webpack-dev-server: ez a webszerver szolgálja ki a fejlesztés idejére az alkalmazást;copy-webpack-plugin: a fájlokat másolja build időben; css-loader, style-loader: a css fájlok bekötéséhez szükséges); ha szeretném. akkor @-cal a verziószámot is megadhatom a függőségnél, pl. style-loader@1.2.1; a ‐‐save-dev kapcsoló: a devDependencies közé veszi fel a függőségeket; ennek annyiban nincs jelentősége, hogy a webpack csak azokat a kódokat tartja meg, amiket az applikáció fel is használ, de fejlesztői szempontból jó, ha látom, hogy mik azok a függőségek, amelyek csak a fejlesztéshez kellenek; az installálás során létrejön a node_modules mappa, ez tartalmazza a függőségeket;
npm install --save-dev webpack webpack-cli webpack-dev-server copy-webpack-plugin css-loader style-loader;
UPDATE (2021 09 01) valamelyik függőség új verziójával valami lehet, így az npm start futtatása hibára fog futni. Használhatjuk a fenti npm telepítések helyett a következő – régebbi verziókat tartalmazó – package.json-t, s így telepítjük a függőségeket az npm install paranccsal (viszont itt egy halom WARN deprecated figyelmeztetést kapunk):
{
"name": "idojaras2",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "webpack serve",
"build": "webpack --config webpack.config.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"copy-webpack-plugin": "^9.0.1",
"css-loader": "^5.2.6",
"file-loader": "^6.2.0",
"loader": "^2.1.1",
"sass": "^1.35.2",
"sass-loader": "^12.1.0",
"style": "0.0.3",
"style-loader": "^3.0.0",
"ttf-loader": "^1.0.2",
"webpack": "^5.44.0",
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^3.11.2"
},
"dependencies": {
"na92-card": "^1.0.0"
}
}
Az error jelzése ez lesz: options has an unknown property ‘contentBase’; Megoldása: contentBase was renamed to static, azaz a contentBase property-t át kell nevezni static-ra a webpack.config.js fájlban – erről a fájlról mindjárt szó lesz;
ha elküldjük zippelve az alkalmazást, akkor a node_modules mappát hagyjuk ki, a fogadó fél az npm install paranccsal tudja létrehozni a package.json file alapján;
fel kell venni a projekt gyökérmappájában egy webpack.config.js fájlt, ez fogja a webpack-et konfigurálni; (kézzel kell felvenni és kitölteni);
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const DIST_DIR = path.resolve(__dirname, 'dist');
module.exports = {
entry: './app.js',
output: {
path: DIST_DIR,
filename: 'bundle.js'
},
plugins: [
new CopyWebpackPlugin({
patterns: [
{from: './index.html', to: DIST_DIR}
]
})
],
module: {
rules: [
{
test: /\.css$/i,
use: [
"style-loader",
"css-loader"
]
},
]
},
devServer: {
contentBase: DIST_DIR
},
}
require: függvényhívás, lényegében import; a JS világban többféle import eljárás terjedt el, ezek közül egy a require; path.resolve: az aktuális mappához hozzáfűzi egy dist nevű mappát; DIST_DIR: ennek a dist mappának az elérési útvonala; module.export: ezt az objectet fogja a js fájl kiexportálni, ez lesz a webpack konfigurációja – ezt az objectet fogja a webpack feldolgozni; entry: az alkalmazás belépési pontja, innen indul el az importok sorozata, innen indulva építi ki a függőségek gráfját, itt dől el, hogy mik lesznek azok a függőségek, amelyek végül belefordulnak az itt meghatározott output-ba; output: a build folyamat kimenete, path: ebbe a mappába teszi a kimeneti fájlt; filename: ez lesz a kimeneti fálj, tetszőlegesen elnevezhető, értelemszerűen a dist mappában lesz; szokásos neve bundle.js plugin: a webpacken belül mindent pluginokkal oldunk meg; egy tömböt vár; több plugint is fel tudnánk sorolni; CopyWebpackPlugin: bizonyos fájlokat átmásol a dist mappába; ez azért van, mert az index.html fájlt sehol sem hivatkozzuk be az app.js fájlba, sehol máshol sem, egyszerűen csak azt szeretnénk, hogy ott legyen az alkalmazás gyökerében; module: a modulok, itt most a css-eket tölti be; test: milyen fájlnevekre egyezen a dolog, ezeket a nevű fájlokat akarjuk betölteni;devServer: futtassunk egy devszervert a lebuildelt alkalmazásból
A package.json „scripts” objectjébe két szkriptet kell felvenni: „start”: „webpack serve”, – ez egy webszervert hoz létre és futtatja az alkalmazást; ha közben átírjuk a kódot, akkor automatikusan újratölti; „build”: „webpack –config webpack.config.js”, – ez buildeli a webpack-et a webpack.config.js-nek megfelelően.

"scripts": {
"start": "webpack serve",
"build": "webpack --config webpack.config.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
futtatásuk: mivel a start beépített npm-es életciklus: npm start vagy npm run-script start; egyéb script parancsok mindig npm run-script előtaggal, azaz build futtatása: npm run-script build; ekkor létre jön a dist mappában a bundle.js; npm start: elindul a szerver; kiírja a terminál: Project is running at http://localhost:8080/; az index.html-be be kell kötni a bundle.js fájlt:<script src=”bundle.js></script>; nem a relatív elérési utat írjuk be, csak a fájl nevet;
A böngészőben a http://localhost:8080/ oldalon egy figyelmeztetést kaphatunk, ezt le kell ikszelni.

Az app.js-be a css közvetlenül beimportálható: import ‘./styles.css’; de beköthetem az index.html-be is: <link rel=”stylesheet” href=”./styles.css”>; ekkor viszont a webpack.config.js fájlban a CopyWebpackPlugin patterns key-hez tartozó tömbben létre kell hozni a {from: ‘./styles.css’, to: DIST_DIR} objectet, hogy a styles.css fájl bemásolódjon a dist-be; ha pl. képet akarunk berakni az index.html-be, akkor az img mappát ugyanúgy be kell copyzni a dist-be: {from: ‘./img’, to: DIST_DIR};
fontok betöltése; Google fonts-ból index.html head-be: <link href=”https://fonts.googleapis.com/css2?family=Roboto&display=swap” rel=”stylesheet”>
Sass: Syntactically Awesome Style Sheets; fájlkiterjesztés: scss; styles.scss; bővebben: itt;
változók deklarálása:pl. $base-color: #c6538c;
nesting:
.form-container {
form{display:flex;align-items:center}
};
Parent Selector:
button {background:none;
background-color:$secondary-color;
color:#FFFFFF;
&:hover{
color:white;
background-color:#254014;
}
&:focus{
background-color: #3DFF4F;
color: $font-color;
}
}
sass, sass-loader installálása: (itt bugos a WordPress: a parancssor nem tudja értelmezni az innen kimásolt ‐‐ jelet, ezért azt írjuk át a billenytűzetről a parancssorban: ‐‐save-dev) npm install ‐‐save-dev sass sass-loader; a devDependencies-be kerül, mert csak fejlesztési időben van rá szükség, a böngészők nem tudnak mit kezdeni a sass fájlokkal; sass: átfordítja a sass fájlokat css fájlokba; sass-loader betölti a sass fájlokat; a build folyamat css-t épít be a bundle-ba, így futásidőben már nincs szükség a sass-ra; test: /.s[ac]ss$/i – ez a sass és a scss fájlokra fog matchcselni; de írhatnánk ezt is helyette: test: /.scss$/i, ekkor csak az scss fájlokra matccsel; ha a styles.css fájlt átnevezzük styles.scss-re, elvileg maradhat benne az eredeti css nyelvű tartalom, a build folyamat azt is érteni fogja;
sass bekötése: webpack.config.js fájlban a module object rules tömbjébe elhelyezni; továbbá app.js-ben: import ‘./styles.scss’
{
//test: /\.css$/i,
test: /\.s[ac]ss$/i,
use: [
"style-loader",
"css-loader",
"sass-loader"
]
},
documentáció: https://webpack.js.org/loaders/sass-loader/
.gitignore fájl: mit ne töltsön fel a gitre:

verziószám: main.minor.patch; package.json: 1;Patch releases: 1.0 or 1.0.x or ~1.0.4; Minor releases: 1 or 1.x or ^1.0.4; Major releases: * or x; függőségek telepítése package.json megkötései szerint: npm install; a package-lock.json a használt verzió pontos verziószámát tartalmazza, ha ezen verziószámok szerint akarjuk telepíteni a függőségeket (hogy ne vegye figyelembe az esetleges függőségeket), akkor: npm ci
bootstrap elhelyezése: letöltés a mode_nodulesbe: npm install bootstrap; bekötés: a style.scss-be @import: ‘~bootstrap’; a tilde a node_modulesre mutat, ott fogja keresni a könyvtárat;