mkdir projekt01
cd projekt01
npm init -y
npm install webpack webpack-cli --save-dev
A következő könyvtárszerkezetet készítjük el:
projekt01/
|-dist/
| `-index.html
|-node_modules/
|-src/
| |-genJoke.js
| `-index.js
|-package-lock.json
`package.json
===== Koncepció =====
* Az index.html csak a dist/ könyvtárban létezik, és csak egyetlen fájlt hivatkozunk, a main.js-t.
* A JavaScriptet az src/ könyvtárban szerkesztjük több fájlban is.
* Az eredményt, viszont a dist/ könyvtárban kíséreljük figyelemmel.
===== Weblap =====
Vicc
Vicc a konzolon
===== JavaScript =====
Írjunk egy modult:
function genjoke() {
return 'Ez most már jó lesz egy darabig'
}
export default genjoke
Az induló fájl neve index.js. Ez független a pakcage.json fájlban megadottól.
import genjoke from "./genJoke";
console.log(genjoke())
===== package.json =====
{
"name": "ketto",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode production"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"webpack": "^5.86.0",
"webpack-cli": "^5.1.4"
}
}
===== A main.js elkészítése =====
npm run build
Nézzük meg milyen main.js-t generál a parancs.
Most írjuk át, vagy hozzá:
import { v4 as uuidv4 } from 'uuid'
console.log(uuidv4())
Nézzük meg újból.
===== Beállítások =====
A beállításokat írjuk egy webpack.config.js fájlba.
module.exports = {
mode: 'production',
entry: './src/app.js'
}
A mode lehet
* production
* development
Nézzük meg az dist/main.js fájl tartalmát mindkét esetben.
==== Belépésipont ====
Az entry segítségével beállítható a forráskönyvtár, illetve azon belül az induló állománynév.
Például:
entry: './src/app.js'
==== Kimeneti fájl ====
Az **output** tulajdonsággal állítjuk, az értéke pedig egy objektum.
Példában egy teljes konfigurációs fájl:
const path = require('path')
module.exports = {
mode: 'production',
entry: './src/app.js',
output: { path: path.resolve(__dirname, 'public') }
}
Az exportálás a végén:
const path = require('path')
const config = {
mode: 'production',
entry: './src/app.js',
output: { path: path.resolve(__dirname, 'public') }
}
module.exports = config
Kimeneti fájl és könyvtár:
const path = require('path')
const config = {
mode: 'production',
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'public'),
filename: 'bundle.js'
}
}
module.exports = config
==== Modulok ====
module: {
rules: [
{
exclude: /(node_modules)/,
test: /\.(js|jsx)$/i,
loader: "babel-loader"
}
]
},
Teljes fájl:
const path = require('path')
const config = {
mode: 'production',
entry: './src/app.js',
output: { path: path.resolve(__dirname, 'public') },
module: {
rules: [
{
exclude: /(node_modules)/,
test: /\.(js|jsx)$/i,
loader: "babel-loader"
}
]
}
}
module.exports = config
A babel-loader használatához szükséges:
npm install -D babel-loader @babel/core @babel/preset-env webpack
===== Stílusbetöltés =====
Szükséges csomagok telepítése:
npm install --save-dev sass sass-loader style-loader css-loader
A stílushoz SCSS-t használunk a következő fájlban:
* src/styles/main.scss
const path = require('path')
const config = {
mode: 'production',
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
}
}
module.exports = config
Az SCSS fájl:
body {
background-color:cadetblue;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
===== Plugin használata =====
plugins: [
new HtmlWebpackPlugin({
title: 'Vicc',
filename: 'index.html'
})
]
A teljes kód:
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const config = {
mode: 'production',
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'Vicc',
filename: 'index.html'
})
]
}
module.exports = config
==== Template használata ====
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const config = {
mode: 'production',
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js'
},
module: {
rules: [
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'Ap',
filename: 'index.html',
template: 'src/template.html'
})
]
}
module.exports = config
<%= htmlWebpackPlugin.options.title %>
Vicces lap
===== Fejlesztői szerver =====
Készítsünk egy **dev** nevű scriptet a package.json fájlban.
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"dev": "webpack serve"
},
Indítsuk el a szervert.
npm run dev
Megkérdezi, hogy telepítsük-e a webpack-dev-server csomagot. Csak nyomjunk Entert.
npm run dev
> projekt01@1.0.0 dev
> webpack serve
[webpack-cli] For using 'serve' command you need to install: 'webpack-dev-server' package.
[webpack-cli] Would you like to install 'webpack-dev-server' package? (That will run 'npm install -D webpack-dev-server') (Y/n)
A webhelyet nézzük meg böngészőben:
http://localhost:8080
Írjunk a szerveren beállításokat a webpack.config.js fájlban:
devServer: {
static: {
directory: path.resolve(__dirname, 'dist')
},
port: 3000,
open: true
},
devServer: {
static: {
directory: path.resolve(__dirname, 'dist')
},
port: 3000,
open: true,
compress: true,
historyApiFallback: true
},
===== Linkek =====
* https://dev.to/typescripttv/6-ways-to-configure-webpack-5a33 (2023)
* https://www.youtube.com/watch?v=IZGNcSuwBZs (2023)
* https://www.smashingmagazine.com/2021/06/getting-started-webpack/ (2023)