Error require is not defined muncul karena file Node.js dijalankan sebagai ES Module, sedangkan require() hanya tersedia di CommonJS. Perbaikan tercepat: cek package.json dan ekstensi file, lalu pilih satu sistem modul dan konsisten menggunakannya.
Penyebab Require Is Not Defined di Node.js
Node.js memakai dua sistem modul yang tidak bisa dicampur sembarangan. CommonJS memakai require() dan module.exports, sedangkan ES Module memakai import dan export.
Masalah paling sering terjadi saat:
package.jsonberisi"type": "module", sehingga semua.jsdianggap ES Module.- File memakai ekstensi
.mjs, yang selalu diproses sebagai ES Module. - Kode menyalin contoh CommonJS ke proyek ES Module, atau sebaliknya.
| Masalah | Penyebab | Solusi |
|---|---|---|
require is not defined |
File berjalan sebagai ES Module | Ganti ke import atau pakai createRequire |
import outside module |
File berjalan sebagai CommonJS | Hapus "type": "module" atau pakai .mjs |
__dirname is not defined |
Pindah ke ES Module | Buat manual dari import.meta.url |
Cara Memperbaiki Require Is Not Defined Node Js
Ikuti pemeriksaan berurutan ini sebelum mengubah kode:
- Buka
package.jsondan lihat apakah ada"type": "module". - Periksa ekstensi file bermasalah, apakah
.js,.mjs, atau.cjs. - Pilih satu solusi di bawah dan terapkan konsisten di file tersebut.
Solusi 1: ganti require ke import
Gunakan ini bila proyek memang memakai "type": "module".
import fs from 'node:fs';
const data = fs.readFileSync('data.txt', 'utf8');
Solusi 2: tetap pakai CommonJS tanpa type module
Gunakan ini bila seluruh proyek masih CommonJS. Pastikan tidak ada "type": "module" di package.json.
const fs = require('node:fs');
const data = fs.readFileSync('data.txt', 'utf8');
Solusi 3: pakai createRequire untuk kasus campuran
Gunakan ini bila file utama harus ES Module tetapi perlu memanggil package CommonJS.
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const config = require('./config.cjs');
FAQ
Apakah require bisa dipakai di type module?
Tidak langsung. Buat fungsi require dulu memakai createRequire(import.meta.url).
Bagaimana mengganti __dirname saat pindah ke import?
Gunakan fileURLToPath(import.meta.url) dari node:url lalu ambil direktorinya dengan path.dirname().
Kapan harus tetap memakai CommonJS?
Tetap pakai CommonJS bila dependency lama hanya mendukung require atau proyek belum siap migrasi ke ES Module.