1/**
2 * Webpack νλ‘μ νΈ λ©μΈ μ§μ
μ
3 *
4 * Webpack νΉμ§:
5 * - λͺ¨λ λ²λ€λ§
6 * - μ½λ λΆν (Code Splitting)
7 * - νΈλ¦¬ μμ΄νΉ (Tree Shaking)
8 * - λ‘λμ νλ¬κ·ΈμΈ μμ€ν
9 */
10
11// CSS μν¬νΈ
12import './styles/main.css';
13
14// μ»΄ν¬λνΈ μν¬νΈ
15import { greeting } from './components/greeting';
16import { formatDate } from './utils/helpers';
17
18// μ± μ΄κΈ°ν
19function initApp() {
20 console.log('π¦ Webpack μ±μ΄ μμλμμ΅λλ€!');
21
22 const content = document.getElementById('content');
23 if (content) {
24 content.innerHTML = greeting('Webpack μ¬μ©μ');
25 }
26
27 console.log(`π
νμ¬ μκ°: ${formatDate(new Date())}`);
28
29 // λμ μν¬νΈ (Code Splitting) μμ
30 const loadMoreBtn = document.getElementById('loadMore');
31 if (loadMoreBtn) {
32 loadMoreBtn.addEventListener('click', async () => {
33 // λμ μν¬νΈ - λ³λ μ²ν¬λ‘ λΆλ¦¬λ¨
34 const { loadExtraContent } = await import(
35 /* webpackChunkName: "extra" */
36 './components/extra'
37 );
38 loadExtraContent(content);
39 });
40 }
41}
42
43// DOM λ‘λ ν μ΄κΈ°ν
44if (document.readyState === 'loading') {
45 document.addEventListener('DOMContentLoaded', initApp);
46} else {
47 initApp();
48}
49
50// HMR (Hot Module Replacement)
51if (module.hot) {
52 module.hot.accept('./components/greeting', () => {
53 console.log('π greeting λͺ¨λμ΄ μ
λ°μ΄νΈλμμ΅λλ€!');
54 const content = document.getElementById('content');
55 if (content) {
56 const { greeting } = require('./components/greeting');
57 content.innerHTML = greeting('Webpack μ¬μ©μ');
58 }
59 });
60}