Definisi dan Fungsi ES Modules
ES Modules (ESM) adalah standar resmi JavaScript untuk mengelola dependensi kode dalam aplikasi. Berbeda dengan sistem modul lama seperti CommonJS (CJS) yang menggunakan require(), ESM menggunakan sintaks import dan export yang bersifat statis, memungkinkan optimasi performa seperti tree-shaking oleh bundler.
Sintaks Dasar
Untuk menggunakan ESM, Anda harus memastikan file memiliki ekstensi .mjs atau mengatur "type": "module" di dalam package.json untuk proyek Node.js.
Export (Mengekspor Kode)
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
export default function multiply(a, b) {
return a * b;
}Import (Mengimpor Kode)
// main.js
import multiply, { add, subtract } from './math.js';
console.log(add(5, 3)); // 8
console.log(multiply(5, 3)); // 15Perbandingan: ESM vs CommonJS
| Fitur | ES Modules (ESM) | CommonJS (CJS) |
|---|---|---|
| Sintaks | import / export | require / module.exports |
| Loading | Asinkron (Statis) | Sinkron (Dinamis) |
| Scope | Strict Mode otomatis | Non-strict |
| Tree-shaking | Didukung penuh | Tidak didukung |
Implementasi di Browser
Untuk menggunakan ESM langsung di browser tanpa bundler, Anda wajib menambahkan atribut type="module" pada tag script:
<script type="module" src="main.js"></script>Browser akan memperlakukan script tersebut sebagai modul, yang berarti variabel di dalamnya tidak akan mencemari global scope dan secara otomatis berjalan dalam strict mode.
Tips Troubleshooting
- Error 'Cannot use import statement outside a module': Pastikan
package.jsonmemiliki"type": "module"atau gunakan ekstensi.mjs. - CORS Policy: Saat memuat modul dari file lokal di browser, Anda harus menjalankan server lokal (seperti Live Server di VS Code) karena ESM memblokir akses file protokol
file://. - Ekstensi File: Selalu sertakan ekstensi file (misal:
./utils.js) saat melakukan import di lingkungan browser atau Node.js modern.
🔍 Orang Lain Juga Mencari Ini
Javascript Import Export
Commonjs Vs Es Modules
Node.js Esm Support
Tree Shaking Javascript
Javascript Module System
Dynamic Import Javascript
Package.json Type Module
Javascript Mjs Extension
Es6 Modules Tutorial
Bundler Javascript Esm
Javascript Strict Mode
Javascript Dependency Management
Browser Es Modules
Javascript Export Default
Javascript Named Exports