Cara Mengatasi Require Is Not Defined Node Js dengan Perbaikan Modul

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.json berisi "type": "module", sehingga semua .js dianggap 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:

  1. Buka package.json dan lihat apakah ada "type": "module".
  2. Periksa ekstensi file bermasalah, apakah .js, .mjs, atau .cjs.
  3. 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.