Error “Module Not Found” adalah salah satu bug paling umum dan sering membuat frustrasi para developer JavaScript, termasuk di Next.js. Pesan error ini muncul ketika kompiler atau runtime Next.js tidak dapat menemukan modul atau file yang coba Anda import. Ini bisa terjadi karena berbagai alasan, mulai dari kesalahan ketik sederhana hingga masalah konfigurasi yang lebih kompleks.
Sebagai seorang developer yang sudah sering berkutat dengan Next.js, saya tahu betul betapa menjengkelkannya melihat error ini berulang kali. Tapi jangan khawatir, sebagian besar masalah “Module Not Found” memiliki solusi yang cukup straightforward. Artikel ini akan memandu Anda melalui penyebab paling umum dan langkah-langkah praktis untuk mengatasinya, agar Anda bisa kembali fokus membangun aplikasi Next.js Anda.
Penyebab Umum “Module Not Found” di Next.js dan Solusinya
Mari kita selami berbagai skenario yang dapat memicu error “Module Not Found” dan bagaimana cara memperbaikinya.
1. Salah Penulisan Path atau Nama Modul
Ini adalah penyebab paling dasar dan seringkali terlewat. Kesalahan ketik pada nama file, nama folder, atau path import adalah biang keladinya.
- Gejala: Error menunjuk langsung ke baris
importdan path yang Anda tulis. - Penyebab:
- Kesalahan ketik pada nama modul (misal:
'./component/Button'padahal seharusnya'./components/Button'). - Kesalahan ketik pada nama variabel import (misal:
import { Button }padahal seharusnyaimport { MyButton }). - Path relatif yang tidak akurat (misal:
'../utils/helpers'padahal seharusnya'../../utils/helpers').
- Kesalahan ketik pada nama modul (misal:
- Solusi:
- Periksa kembali setiap huruf pada path dan nama modul yang Anda import. Pastikan semuanya sesuai dengan nama file/folder yang sebenarnya.
- Manfaatkan fitur auto-completion dari IDE Anda (seperti VS Code) untuk meminimalkan kesalahan ketik.
2. Modul Eksternal Belum Terinstall atau Hilang
Ketika Anda mengimport sebuah pustaka dari npm (misalnya lodash, react-query, atau pustaka UI seperti shadcn/ui), Next.js perlu memastikan pustaka tersebut ada di folder node_modules proyek Anda.
- Gejala: Error “Module Not Found” yang menyebut nama paket npm (misal:
"Module not found: Can't resolve 'axios'"). - Penyebab:
- Anda lupa menginstall paket tersebut (misal:
axiosbelum diinstall). node_modulesAnda rusak atau tidak lengkap (misalnya setelahgit pulldari rekan tim).- Paket tersebut ada di
package.jsontetapi belum diinstall (setelah kloning repo baru).
- Anda lupa menginstall paket tersebut (misal:
- Solusi:
- Install paket yang hilang menggunakan package manager Anda:
npm install nama-paketyarn add nama-paketpnpm add nama-paket
- Jika Anda baru saja mengkloning repositori atau
node_modulesAnda terasa “berantakan”, hapus foldernode_modulesdan filepackage-lock.json(atauyarn.lock/pnpm-lock.yaml), lalu install ulang semua dependensi:rm -rf node_modules package-lock.json
npm install
- Install paket yang hilang menggunakan package manager Anda:
3. Import Path yang Salah (Relatif vs. Absolut vs. Alias)
Next.js mendukung beberapa jenis import path. Menggunakan jenis yang salah atau tidak konsisten dapat menyebabkan kebingungan.
- Gejala: Error menunjukkan path yang terlihat benar tapi tidak ditemukan, atau path relatif yang sangat panjang (misal:
'../../../components/Button'). - Penyebab:
- Menggunakan path relatif yang tidak akurat.
- Mencoba menggunakan absolute import (misal:
'@/components/Button') tanpa mengkonfigurasi alias path dijsconfig.json(untuk JavaScript) atautsconfig.json(untuk TypeScript).
- Solusi:
- Untuk path relatif: Pastikan Anda menghitung jumlah
../dengan benar untuk keluar dari folder dan masuk ke folder yang dituju. - Untuk absolute import (direkomendasikan): Konfigurasi alias path di
jsconfig.jsonatautsconfig.json. Ini sangat membantu untuk proyek besar.Contoh
jsconfig.json:{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "/*.ts", "/*.tsx", "/*.js", "/*.jsx"],
"exclude": ["node_modules"]
}Dengan konfigurasi ini, Anda bisa mengimport seperti
import Button from '@/components/Button';dari mana saja di proyek Anda.
- Untuk path relatif: Pastikan Anda menghitung jumlah
4. Case Sensitivity File System
Ini adalah jebakan umum, terutama bagi developer yang beralih antara sistem operasi (misalnya dari Windows ke Linux/macOS atau sebaliknya). Windows secara default tidak peka huruf besar/kecil (case-insensitive), sementara Linux dan macOS peka huruf besar/kecil (case-sensitive).
- Gejala: Kode berfungsi di satu OS tetapi tidak di OS lain. Error menunjukkan path yang terlihat identik.
- Penyebab:
- Anda memiliki file bernama
mycomponent.jstetapi mengimportnya sebagai'./MyComponent'. - Anda memiliki folder bernama
componentstetapi mengimport dari'./Components/Button'.
- Anda memiliki file bernama
- Solusi:
- Pastikan nama file dan folder Anda di disk (file system) sama persis dengan yang Anda tulis dalam statement
import, termasuk penggunaan huruf besar/kecil. - Biasakan menggunakan konvensi penamaan yang konsisten (misal: PascalCase untuk komponen, kebab-case untuk file CSS/utility).
- Pastikan nama file dan folder Anda di disk (file system) sama persis dengan yang Anda tulis dalam statement
5. Konfigurasi Transpilasi Bermasalah
Next.js menggunakan Babel dan Webpack di belakang layar untuk mentranspilasi kode Anda. Terkadang, konfigurasi yang salah dapat menyebabkan modul tidak dikenali.
- Gejala: Error terjadi pada modul yang tampaknya terinstall dengan benar, seringkali melibatkan sintaks ES Modules (
import/export) atau CommonJS (require/module.exports). Ini juga sering muncul ketika mengimport komponen UI yang belum di-transpile oleh Next.js. - Penyebab:
- Anda mengimport modul CommonJS di lingkungan ES Modules atau sebaliknya tanpa konfigurasi yang tepat.
- Anda menggunakan pustaka pihak ketiga yang belum di-transpile ke sintaks yang bisa dipahami Next.js secara default (misalnya, di monorepo).
- Konfigurasi
next.config.jsyang salah untuk Webpack atau Babel.
- Solusi:
- Untuk pustaka pihak ketiga yang perlu ditranspilasi: Di Next.js 13 ke atas, gunakan opsi
transpilePackagesdinext.config.js. Ini sangat berguna untuk monorepo atau saat menggunakan pustaka yang tidak teroptimasi untuk ES Modules di browser.// next.config.js
/ @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ['nama-paket-yang-perlu-ditranspilasi'], // Contoh: ['@mui/x-charts']
};
module.exports = nextConfig; - Pastikan tidak ada konfigurasi Babel atau Webpack kustom yang bertentangan dengan Next.js default, kecuali jika Anda tahu persis apa yang Anda lakukan.
- Untuk pustaka pihak ketiga yang perlu ditranspilasi: Di Next.js 13 ke atas, gunakan opsi
6. Konflik Antara Server-side dan Client-side Import
Next.js mendukung rendering sisi server (SSR) dan client-side rendering (CSR). Modul yang dirancang hanya untuk lingkungan browser (misalnya, yang mengakses window atau document) akan gagal saat diimport dan dijalankan di sisi server.
- Gejala: Error “Module Not Found” diikuti dengan pesan seperti “ReferenceError: window is not defined” atau “document is not defined”.
- Penyebab: Anda mencoba mengimport modul yang hanya berjalan di browser (client-side) di dalam komponen yang di-render di server.
- Solusi: Gunakan Dynamic Import with
ssr: false. Ini akan memastikan modul hanya dimuat di sisi client.import dynamic from 'next/dynamic';
const ClientOnlyComponent = dynamic(() => import('../components/ClientOnly'), {
ssr: false, // Penting! Jangan render di server
loading: () =>Loading...
, // Opsional: placeholder saat loading
});
export default function MyPage() {
return (
<div>
<h1>Halaman Ini Memiliki Komponen Client-Only</h1>
<ClientOnlyComponent />
</div>
);
}
7. Caching Bermasalah
Sistem cache yang terlalu agresif dari package manager atau bahkan cache build Next.js itu sendiri dapat menyebabkan masalah di mana perubahan pada file atau instalasi modul tidak terdeteksi.
- Gejala: Anda sudah yakin semua path dan instalasi benar, tetapi error tetap muncul.
- Penyebab:
- Cache npm/yarn/pnpm yang menyimpan versi paket lama.
- Cache build Next.js di folder
.next/.
- Solusi:
- Hapus folder
.next/di root proyek Anda. - Hapus folder
node_modules/dan filepackage-lock.json(atauyarn.lock/pnpm-lock.yaml). - Jalankan perintah untuk membersihkan cache package manager (jika perlu):
npm cache clean --forceyarn cache cleanpnpm store prune
- Install ulang semua dependensi:
npm installatauyarnataupnpm install. - Restart development server Next.js Anda (
npm run dev).
- Hapus folder
8. Isu di Monorepo atau Proyek Multi-paket
Jika Anda bekerja di lingkungan monorepo (misalnya dengan Turborepo, Lerna, atau NX), mengelola dependensi antar paket bisa menjadi lebih rumit.
- Gejala: Modul yang berada di dalam salah satu paket lokal (misal:
'ui-kit') tidak ditemukan oleh aplikasi Next.js Anda. - Penyebab:
- Dependensi tidak di-hoist dengan benar oleh package manager.
- Next.js tidak mengerti cara mentranspilasi kode dari paket lokal.
- Symlink yang rusak antar paket.
- Solusi:
- Pastikan semua paket lokal terdaftar sebagai dependensi di
package.jsonaplikasi Next.js Anda (biasanya di bagiandependenciesataudevDependencies). - Gunakan
transpilePackagesdinext.config.jsNext.js Anda untuk semua paket lokal yang perlu ditranspilasi (seperti dijelaskan di poin 5). - Periksa konfigurasi monorepo Anda (
package.json,lerna.json,turbo.json) untuk memastikan hoisting dependensi dan workspace dikelola dengan benar. - Coba lakukan
npm install(atauyarn/pnpm install) di root monorepo, bukan hanya di sub-proyek.
- Pastikan semua paket lokal terdaftar sebagai dependensi di
9. Versi Next.js atau Dependensi yang Usang/Tidak Kompatibel
Terkadang, masalah “Module Not Found” bisa muncul karena ketidakcocokan versi antara Next.js dan salah satu dependensi Anda, terutama setelah Next.js melakukan major update.
- Gejala: Error muncul setelah memperbarui Next.js atau dependensi lain, atau ketika Anda menggunakan fitur/modul yang baru.
- Penyebab:
- Modul yang Anda gunakan belum kompatibel dengan versi Next.js terbaru.
- Versi Next.js yang Anda gunakan terlalu lama untuk modul tertentu.
- Solusi:
- Perbarui semua dependensi Anda ke versi terbaru:
npm updateatauyarn upgrade. - Periksa dokumentasi resmi Next.js dan modul yang bermasalah untuk mengetahui persyaratan versi atau breaking changes.
- Jika ada modul yang benar-benar tidak kompatibel, Anda mungkin perlu mencari alternatif atau downgrade Next.js (meskipun ini jarang direkomendasikan).
- Perbarui semua dependensi Anda ke versi terbaru:
Masalah yang Sering Terjadi
Berikut adalah beberapa skenario spesifik “Module Not Found” yang sering saya temui dan solusinya:
Module not found: Can’t resolve ‘fs’ atau ‘path’
Ini adalah error klasik ketika Anda mencoba mengimport modul Node.js built-in seperti fs (File System) atau path di komponen yang akan di-render di sisi klien. Modul ini hanya tersedia di lingkungan Node.js (server-side).
- Solusi:
- Jika Anda benar-benar membutuhkan fungsionalitas ini, pastikan code tersebut hanya dijalankan di server. Gunakan
if (typeof window === 'undefined')untuk kondisi server-only. - Gunakan Dynamic Import dengan
ssr: falseuntuk komponen yang mengimport modul tersebut (seperti dijelaskan di poin 6). - Refaktor kode agar operasi file system dilakukan di API routes atau getServerSideProps/getStaticProps.
- Jika Anda benar-benar membutuhkan fungsionalitas ini, pastikan code tersebut hanya dijalankan di server. Gunakan
Module not found: Can’t resolve ‘./my-component.css’ atau ‘./styles.module.css’
Error ini terjadi saat mengimport file CSS atau CSS Module.next.js memiliki cara spesifik untuk menangani CSS.
- Solusi:
- Pastikan file CSS/CSS Module Anda memiliki ekstensi yang benar (
.cssatau.module.css). - Pastikan Anda mengimport CSS global di
_app.js(atau_app.tsx) atau mengimport CSS Module secara lokal ke komponen yang sesuai. - Next.js secara otomatis mendukung CSS Modules. Untuk CSS biasa, Anda mungkin perlu menginstall
@zeit/next-css(untuk Next.js versi lama) atau pastikan konfigurasi Webpack Anda benar jika Anda melakukan konfigurasi kustom. Untuk Next.js versi baru, support CSS sudah built-in.
- Pastikan file CSS/CSS Module Anda memiliki ekstensi yang benar (
Module not found: Can’t resolve ‘my-npm-package’ padahal sudah install
Anda sudah yakin paketnya ada di package.json dan sudah menjalankan npm install, tapi error masih muncul.
- Solusi:
- Periksa kembali ejaan nama paket di statement
importdan dipackage.json. - Coba hapus
node_modulesdanpackage-lock.json, lalu install ulang seperti dijelaskan di poin 2 (Solusi “Modul Eksternal Belum Terinstall atau Hilang”). - Kadang ada masalah dengan cache Webpack Next.js. Coba hapus folder
.next/dan restart development server Anda. - Verifikasi apakah paket tersebut benar-benar di-hoist dengan benar, terutama di setup monorepo.
- Periksa kembali ejaan nama paket di statement
Pengalaman dan Pertimbangan Praktis
Sebagai seorang developer, saya telah menghadapi “Module Not Found” dalam berbagai skenario. Berikut adalah beberapa pengalaman dan pertimbangan praktis yang mungkin berguna:
- Gunakan IDE yang Kuat: Visual Studio Code dengan ekstensi seperti ESLint dan Prettier sangat membantu. Fitur auto-completion dan error highlighting-nya seringkali bisa mendeteksi kesalahan path bahkan sebelum Anda menjalankan kode. Saya pribadi mengandalkan fitur ini setiap hari.
- Pentingnya Konsistensi: Di proyek yang lebih besar, konsistensi dalam penamaan file, struktur folder, dan cara import (misalnya, selalu gunakan absolute import) adalah kunci. Ini mengurangi kemungkinan kesalahan dan membuat codebase lebih mudah dikelola.
- Debugging yang Sistematis: Jangan panik saat melihat error. Mulailah dari penyebab paling sederhana (kesalahan ketik, modul belum terinstall) sebelum beralih ke konfigurasi yang lebih kompleks. Seringkali, masalahnya jauh lebih sederhana dari yang kita duga. Saya punya kebiasaan mencoba restart dev server dan menginstall ulang dependensi sebagai langkah pertama yang cepat.
- Alias Path adalah Penyelamat: Saya sangat merekomendasikan penggunaan alias path di
jsconfig.jsonatautsconfig.json. Ini secara drastis mengurangi panjang import path relatif (../../../) dan membuat kode lebih mudah dibaca dan di-refactor. - Monitor Versi Dependensi: Di ekosistem JavaScript yang bergerak cepat, versi dependensi bisa menjadi masalah. Saya sering memeriksa changelog atau isu di GitHub ketika saya memperbarui Next.js atau pustaka utama dan tiba-tiba menghadapi masalah. Ada alat seperti Dependabot atau Renovate yang bisa membantu otomatisasi ini.
- Monorepo Membutuhkan Perhatian Ekstra: Jika Anda menggunakan monorepo, bersiaplah untuk menghadapi tantangan ekstra terkait
Module Not Found.transpilePackagesdi Next.js 13+ adalah fitur krusial yang harus Anda pahami. Juga, pastikan Anda paham bagaimana package manager Anda (npm, Yarn, pnpm) mengelola workspaces dan hoisting.
FAQ
Apa itu error “Module Not Found”?
“Module Not Found” adalah pesan error yang muncul ketika program (dalam hal ini, aplikasi Next.js Anda) tidak dapat menemukan file atau pustaka yang Anda coba gunakan melalui statement import atau require. Ini berarti lokasi file atau nama modul yang Anda sebutkan tidak dapat ditemukan di jalur yang diharapkan.
Mengapa Next.js sensitif terhadap case sensitivity?
Next.js di lingkungan produksi (dan seringkali di pengembangan) menggunakan sistem file yang peka huruf besar/kecil (seperti Linux atau macOS), meskipun Anda mungkin mengembangkan di Windows yang tidak peka huruf besar/kecil secara default. Ini berarti MyComponent.js dan mycomponent.js dianggap sebagai dua file yang berbeda. Jika Anda mengimport MyComponent tetapi nama file aslinya mycomponent.js, maka di lingkungan produksi akan terjadi error “Module Not Found”.
Bagaimana cara menggunakan absolute import di Next.js?
Anda dapat mengkonfigurasi absolute import di Next.js dengan menambahkan file jsconfig.json (untuk JavaScript) atau tsconfig.json (untuk TypeScript) di root proyek Anda. Di dalamnya, tambahkan konfigurasi baseUrl dan paths. Contohnya, "@/*": ["./*"] akan memungkinkan Anda mengimport file dari root proyek menggunakan @/ sebagai alias.
Apa fungsi transpilePackages di Next.js?
transpilePackages adalah opsi konfigurasi di next.config.js (tersedia di Next.js 13 ke atas) yang memungkinkan Anda memberitahu Next.js untuk secara eksplisit mentranspilasi (mengubah dari satu sintaks ke sintaks lain, misalnya dari ESNext ke ES5) paket npm tertentu. Ini sangat berguna ketika Anda menggunakan pustaka pihak ketiga atau paket lokal di monorepo yang mungkin menggunakan sintaks JavaScript modern dan perlu diolah oleh Babel/Webpack Next.js agar kompatibel dengan browser target.
Haruskah saya menghapus node_modules setiap kali ada error?
Tidak selalu. Menghapus node_modules dan package-lock.json (atau file lock lainnya) lalu menginstall ulang adalah “solusi nuklir” yang sering berhasil mengatasi masalah dependensi yang aneh atau cache yang rusak. Namun, ini memakan waktu. Coba langkah-langkah debugging yang lebih sederhana terlebih dahulu, seperti memeriksa path, nama file, atau menjalankan npm install biasa. Lakukan langkah “hapus dan install ulang” hanya jika cara lain tidak berhasil.
Kesimpulan
Error “Module Not Found” di Next.js memang menjengkelkan, tetapi jarang sekali tidak memiliki solusi. Kunci untuk mengatasinya adalah dengan pendekatan yang sistematis: mulai dari memeriksa hal-hal dasar seperti kesalahan ketik dan instalasi modul, hingga menyelami konfigurasi yang lebih dalam seperti alias path, transpilasi, atau masalah server/client-side rendering.
Dengan memahami penyebab umum dan solusi yang telah dibahas di atas, Anda akan jauh lebih siap menghadapi error ini. Jangan lupa untuk selalu mengandalkan IDE Anda, menjaga konsistensi kode, dan yang terpenting, jangan ragu untuk membersihkan cache dan menginstall ulang dependensi jika Anda merasa ada yang tidak beres. Kode yang bersih, konfigurasi yang rapi, dan pemahaman yang baik tentang Next.js akan meminimalkan waktu yang Anda habiskan untuk debugging dan memaksimalkan waktu Anda untuk membangun fitur-fitur keren!
TAGS: Next.js, Module Not Found, JavaScript, Troubleshooting, Web Development, Programming Errors, Developer Tools, Frontend, npm


