Pernah bingung gimana caranya sebuah framework menghasilkan sebuah kode output yang berbeda dengan kode yang kamu tulis? Penasaran sebetulnya apa yang terjadi dibalik layar dan gimana caranya kamu bisa belajar dari hal itu untuk memperbaiki kode yang kamu hasilkan?
20. Solusi yang lebih baik
• Proses update dependencies yang lebih
mudah
• Tidak khawatir terhadap dependencies of
dependencies
• Urutan dari import tidak menjadi masalah
22. function add(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
}
function mul(a, b) {
return a * b;
}
function div(a, b) {
return a / b;
}
basic_calc.js
38. Suatu saat kita butuh sistem
modulasi yang dapat digunakan di
aplikasi atau proyek berbeda
39. Module System
• Sintaksis yang lebih sederhana untuk
import/export
• Bisa dengan mudah mendefinisikan modul
di file terpisah
• Bisa saling import
Must have!
40. Module System
• Menghindari name collision
• Import modul secara async
• Bisa di browser atau di server via
node.js
Nice to have!
44. Globals
• Naming collisions 👎
• Urutan import harus diperhatikan 👎
• Tidak bisa import sebagian modul yang
dibutuhkan 👎
• Hanya bisa menggunakan pustaka dari CDN 👎
46. CommonJS
• Tidak terjadi naming collision 👍
• Pustaka banyak tersedia via npm 👍
• Dapat digunakan di server via Node.js 👍
• Belum bisa untuk di browser 👎
• Hanya bisa import secara synchronous 👎
47. Asynchronous Module Definition
// lib.js
define('yayQuery', ['yayQueryUI'], function(yayQueryUI) {
// returns the exported value
return function() {
// ...
};
});
// app.js
// define path
requirejs.config({
baseUrl: 'js/lib/',
paths: {
yayquery: 'yayquery-1.1.1'
}
});
define(['yayquery'], function($) {
// this is executed only when yayquery and it's deps are loaded
});
50. Universal Module Definition
• Semua jenis modul bisa digunakan 👍
• Kode pembungkus cukup kompleks,
sepertinya sulit ditulis manual 👎
51. ES2015 Modules
// calc.js
const add = (a, b) => a + b;
const sub = (a, b) => a - b;
const mul = (a, b) => a * b;
const div = (a, b) => a / b;
export { add, sub, mul, div };
// app.js
import { add } from './calc.js';
console.log(add(1, 3));
58. Alat bantu untuk melakukan
bundle JavaScript modules menjadi satu
file dan dan dapat dijalankan di
browser.
59. Fitur Penting Lainnya
• Sistem modulasi belum sepenuhnya
didukung oleh browser
• Menangani dependencies dan hubungan
dengan dependencies lain
• Dapat pula digunakan untuk gambar, CSS
dan aset lainnya.
61. Konsep Umum Bundler
• Entry point: file utama yang akan dicek
oleh bundler
• Output: File akhir yang akan digunakan
• Loaders: Algoritma parsing yang ingin
digunakan seperti babel, typescript,
dll.
• Plugins: Fitur tambahan yang dibutuhkan.
89. function basic_calc$add(a, b) {
return a + b;
}
function basic_calc$mul(a, b) {
return a * b;
}
function advance_calc$squared(a) {
return basic_calc$mul(a, a);
}
console.log(basic_calc$add(1, 3));
console.log(basic_calc$mul(2, 4));
console.log(advance_calc$squared(4));
Ilustrasi Rollup
100. Kesimpulan
• Module bundler adalah alat bantu untuk
membungkus JavaScript agar dimengerti
browser
• Bundler dibutuhkan agar aplikasi lebih
modular dan dapat menggunakan sintaksis
JavaScript modern
• Menggunakan concatenation dan minification
cukup untuk aplikasi sederhana