JavaScript alapú alkalmazások fejlesztésére használható eszköz. Ügyel arra, hogy egy függőség csak egyszer legyen betöltve. A weboldalakt kliensoldalon rendereli.
Példa Githubon:
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
Í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())
{ "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" } }
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.
A beállításokat írjuk egy webpack.config.js fájlba.
module.exports = { mode: 'production', entry: './src/app.js' }
A mode lehet
Nézzük meg az dist/main.js fájl tartalmát mindkét esetben.
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'
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
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
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:
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; }
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
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
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 },