Bundle Website Statik Dengan Webpack
Intro dan Persiapan
Mari kita nge-bundling website statik dengan webpack, untuk meminimalkan jumlah HTTP request dan meningkatkan kinerja website. Tujuannya cukup jelas dan mudah, untuk bisa melakukan ini:
<html>
<head>
...
</head>
<body>
...
<script src="./dist/bundle.js"></script>
</body>
</html>
dan bukan ini:
<html>
<head>
<link rel="stylesheet" href="./assets/main.css">
</head>
<body>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="./assets/main.js"></script>
</body>
</html>
Kita mulai dengan projek sederhana seperti berikut ini:
project
|__ index.html
|__ assets
|__ main.css
|__ main.js
Isi dari file-file tersebut bisa dilihat disini. Project ini membutuhkan jQuery sebagai library external, dan pada akhirnya struktur projek akan jadi seperti ini:
project
|__ index.html
|__ assets
| |__ main.css
| |__ main.js
|__dist
| |__ bundle.js
|__ node_modules
| |__ *modules-for-development*
|__ app.js
|__ package.json
|__ package-lock.json
|__ webpack.config.js
AKAN TETAPI, kita hanya akan membutuhkan index.html dan dist/bundle.js sebagai hasil akhir dari website statik.
Langkah-langkah
- Masuk ke folder projek
- Install webpack dan jQuery
npm i -D webpack webpack-cli jquery
- Install style-loader dan css-loader untuk menangani CSS
npm i -D style-loader css-loader
- Buat file webpack.config.js
// webpack.config.js const webpack = require('webpack') module.exports = { entry: './app.js', // the entry point, see step #4 mode: 'production', output: { path: `${__dirname}/dist`, filename: 'bundle.js', }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', // inject CSS to page 'css-loader', // translates CSS into CommonJS modules ], }, ], }, plugins: [ new webpack.ProvidePlugin({ $: "jquery", // to make sure jquery is globally accessable jQuery: "jquery", }) ] };
- Buat app.js sebagai entry point untuk mem-bundle website. Ingat ya, urutannya penting. Karena main.js butuh jQuery, jadi jQuery harus duluan.
// app.js require('./assets/main.css') window.$ = require('jquery'); require('./assets/main.js')
- Tambahkan build script ke package.json
// package.json { "scripts": { "build": "webpack" }, "devDependencies": { "css-loader": "^6.7.1", "jquery": "^3.6.0", "style-loader": "^3.3.1", "webpack": "^5.73.0", "webpack-cli": "^4.10.0" } }
- Build the project
Kalau semuanya lancar, webpack akan mem-bundle assets/main.css, assets/main.js, dan jQuery menjadi 1 file yang namanya bundle.js. File ini bisa ditemukan di folder dist.npm run build
- Perbarui index.html dengan cara menghapus referensi-referensi ke assets/main.css, assets/main.js dan jQuery, lalu tambahkan referensi ke dist/bundle.js
- SELESAI. Sekarang kita hanya butuh index.html dan dist/bundle.js untuk diunggah ke web hosting, sedangkan projek yang ada bisa disimpan untuk proses development.
Git: https://github.com/TheMaggieSimpson/bundle-staticweb-webpack/tree/master/css-js-jquery
References: