by Zass Desuta

Bantuan

Cara Mengatasi Error "Cannot find module" di Node.js: Import, Export, dan Typo

Muncul "Cannot find module" padahal filenya ada? Biasanya penyebabnya typo nama file, path salah, lupa ekstensi, atau beda sistem modul. Ini cara cek satu per satu.

Tim PterokuDesu5 menit baca

Bagikan
Daftar isi

Error Cannot find module adalah salah satu error Node.js yang paling sering muncul. Artinya sederhana: Node.js mencoba membuka file atau package yang kamu tulis di require() atau import, tapi tidak menemukannya.

Kabar baiknya, kalau project-mu baru kamu tulis atau kamu ubah, penyebabnya hampir selalu ada di kode: salah ketik, salah path, atau salah cara import. Artikel ini membahas penyebab-penyebab itu, urut dari yang paling sering.

Kalau error muncul di script yang sebelumnya jalan normal, atau tepat setelah kamu mengganti script dengan versi baru, kemungkinan masalahnya ada di versi Node.js. Lihat Cara Mengatasi Error Node.js di Pterodactyl.

Langkah 0: Baca pesan errornya dulu

Buka tab Console dan baca log error-nya. Ada dua bentuk pesan yang berbeda artinya:

Teks
Error: Cannot find module './utils/helper'
Require stack:
- /home/container/src/index.js
Teks
Error: Cannot find module 'discord.js'
  • Kalau namanya diawali ./, ../, atau /, berarti Node.js mencari file milikmu sendiri. Lanjut ke Cara 1 sampai 5.
  • Kalau namanya polos seperti discord.js atau express, berarti yang dicari adalah package. Lanjut ke Cara 6.
  • Baris Require stack menunjukkan file mana yang melakukan import. Mulai periksa dari file paling atas di daftar itu.

Cara 1: Periksa typo dan huruf besar-kecil

Server Pterodactyl berjalan di Linux, dan Linux membedakan huruf besar dan kecil. Di komputer Windows Helper.js dan helper.js dianggap sama, tapi di server keduanya adalah file berbeda.

JavaScript
// File aslinya bernama Helper.js, tapi kamu menulis:
const helper = require("./helper")   // error di server, jalan di Windows

Yang perlu dicek:

  • Huruf besar-kecil nama file dan folder harus sama persis dengan yang ada di File Manager.
  • Tidak ada salah ketik, misalnya ultils padahal foldernya utils.
  • Tidak ada spasi atau karakter aneh di nama file.

Cara 2: Perbaiki path relatif

Path relatif dihitung dari lokasi file yang melakukan import, bukan dari folder utama project.

Teks
project/
├─ index.js
└─ src/
   ├─ commands/
   │  └─ ping.js
   └─ utils/
      └─ helper.js

Kalau ping.js ingin memakai helper.js:

JavaScript
// Di src/commands/ping.js
require("./utils/helper")      // salah: mencari src/commands/utils/helper
require("../utils/helper")     // benar: naik satu folder dulu

Tips: hitung berapa folder yang harus naik. ./ berarti folder yang sama, ../ naik satu level, ../../ naik dua level.

Cara 3: Tambahkan ekstensi file kalau memakai ESM

Kalau project-mu memakai import ... from dan package.json berisi "type": "module", Node.js mewajibkan ekstensi file pada import relatif. Error-nya sedikit berbeda:

Teks
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/container/src/utils/helper' imported from /home/container/src/index.js
JavaScript
import { halo } from "./utils/helper"      // error
import { halo } from "./utils/helper.js"   // benar

Untuk import folder, tulis file index-nya secara lengkap:

JavaScript
import config from "./config/index.js"

Kalau memakai require() (CommonJS), ekstensi .js boleh dihilangkan.

Cara 4: Pastikan file benar-benar ada di server

Kadang kodenya benar, tapi filenya memang tidak ada di server. Penyebab yang sering:

  • File belum ikut ter-upload, atau terupload ke folder yang salah.
  • File kamu ganti nama atau pindahkan, tapi baris import-nya belum diubah.
  • Memakai TypeScript, tapi hasil build (misalnya folder dist) belum dibuat atau belum diupload, sementara startup command menjalankan file di dist.
  • Menyalin project dari Git, tapi ada file yang masuk .gitignore sehingga tidak ikut.

Buka File Manager, telusuri folder satu per satu, dan pastikan file yang dicari ada di lokasi yang sama dengan yang tertulis di error.

Panduan upload: Upload File, File Manager, dan SFTP.

Cara 5: Cocokkan export dan import

Setelah file ketemu, bisa jadi isinya yang tidak diekspor dengan benar. Gejalanya tidak selalu "Cannot find module", tapi masih sekeluarga:

CommonJS

JavaScript
// helper.js
function halo() { return "halo" }
module.exports = { halo }          // jangan lupa baris ini

// index.js
const { halo } = require("./helper")

Kalau lupa module.exports, hasil require jadi objek kosong dan muncul error seperti halo is not a function.

ESM

JavaScript
// helper.js
export function halo() { return "halo" }

// index.js
import { halo } from "./helper.js"

Kalau nama yang kamu import tidak diekspor, akan muncul error seperti ini:

Teks
SyntaxError: The requested module './helper.js' does not provide an export named 'halo'

Periksa ejaan nama export dan import. Perhatikan juga perbedaan export default (diimport tanpa kurung kurawal) dan named export (diimport dengan kurung kurawal).

Cara 6: Daftarkan package yang belum terpasang

Kalau yang hilang adalah package seperti discord.js, express, atau mysql2, artinya package itu belum terinstal. Biasanya karena belum ada di package.json.

  1. Buka package.json dan lihat bagian dependencies. Package yang kamu import harus ada di sana.
  2. Kalau belum ada, tambahkan lewat Console:
Teks
   npm install nama-package
  1. Pastikan package.json ada di folder utama (satu level dengan file startup), bukan di dalam subfolder.
  2. Restart server.

Kalau package sudah ada di package.json tapi tetap tidak ketemu, atau instalasinya gagal, coba hapus folder node_modules, lalu start ulang agar terinstal bersih. Kalau gagal terus, lanjut ke Cara Mengatasi Error Node.js di Pterodactyl.

Cara 7: Samakan sistem modul (require vs import)

Ada dua gaya penulisan modul di Node.js, dan keduanya tidak boleh dicampur sembarangan dalam satu file.

Pesan errorPenyebabSolusi
Cannot use import statement outside a moduleKode memakai import, tapi project masih CommonJSTambahkan "type": "module" di package.json, atau ganti import jadi require
require is not defined in ES module scopeKode memakai require, tapi package.json berisi "type": "module"Ganti require jadi import, atau hapus "type": "module"

Pilih satu gaya dan konsisten di seluruh project.

Ringkasan cepat

GejalaCek ini dulu
Path diawali ./ atau ../Typo, huruf besar-kecil, path relatif, ekstensi .js
Nama polos seperti expressPackage belum ada di package.json
ERR_MODULE_NOT_FOUNDLupa ekstensi .js di import relatif (ESM)
does not provide an export namedNama export dan import tidak cocok
Cannot use import statement / require is not definedSistem modul tidak konsisten
Error muncul di script yang biasanya jalanVersi Node.js di Docker Image

Masih error juga?

Kumpulkan informasi ini sebelum menghubungi kami: teks error lengkap dari Console (termasuk Require stack), isi package.json, dan struktur folder dari File Manager. Dengan itu penyebabnya biasanya cepat ketemu.

Apakah artikel ini membantu?

Artikel Terkait

Hubungi kami