Tree-shaking = loại bỏ code chết (dead-code elimination): bundler bỏ các export không được import ra khỏi bundle production.
Nó dựa vào cấu trúc tĩnh của ES module — import/export phân tích được lúc build. Vì vậy không được để Babel transpile ESM sang CommonJS nếu muốn tree-shake.
sideEffects trong package.json báo file nào "thuần" (không side effect) để bundler bỏ nguyên module không dùng. Cẩn thận: file CSS import, polyfill có side effect → đừng đặt sideEffects: false tùy tiện để tránh loại nhầm chúng.
Chỉ hiệu quả đầy đủ ở mode: 'production' (có minify để thực sự xóa code đã đánh dấu).