Bu makalede, bu hatanın oluşma nedenleri ve bunu düzeltmenin yolları ayrıntılı olarak anlatılmaktadır.
JavaScript/Node.js'deki “require is not define” Hatası Nasıl Çözülür?
Node.js ortamı yerine web tarayıcısında çalıştırılması gereken JavaScript dosyasında require() işlevi bulunduğunda “require bulunamadı” referans hatası ortaya çıkıyor.
require() İşlevi nedir?
require() işlevi global bir kapsama sahiptir ve Node.js tarafından verilmektedir. Node.js uygulamasındaki modülleri yükler ve çalıştırır. Birçok tarayıcı Node.js'yi desteklemediğinden require() işlevi onlarda mevcut değildir.
Bu Hata Ne Zaman Oluşur?
Bu hata genellikle her iki tarayıcıda da Node.js ile birlikte JavaScript kullanıldığında ortaya çıkar. Hata üç şekilde ortaya çıkabilir:
- Tarayıcı ortamında require() işlevi kullanıldığında.
- Node.js ve package.json dosyasında require() işlevi kullanıldığında tür “module” olarak ayarlanır
- Node.js'de require() işlevi kullanıldığında dosyalar .mjs uzantısına sahip olur.
Const sözdizimini kullanma “ dosyam = require('./dosyam') ” web tabanlı bir ortamda şuna benzeyen bir hata verecektir:
Bu hatayı çözmek için farklı çözümleri tartışalım.
Durum 1: Tarayıcı Ortamındaki Hata
require() işlevi özellikle Node.js'de çalışır. Çoğu tarayıcı Node.js ile uyumlu olduğundan require() işlevini desteklemez. ES6 modülü içe aktarma modülü 'ReferenceError gereksinimi tanımlanmadı' hatasını çözer. Aşağıda bunun nasıl yapılabileceğini gösteren bir kod örneği verilmiştir:
DOCTYPE HTML'si >< vücut >
< komut dosyası türü = 'modül' kaynak = 'index.js' > senaryo >
< komut dosyası türü = 'modül' kaynak = 'dosya.js' > senaryo >
vücut >
HTML >
İşlevlerinin file.js'de kullanılabilmesi için önce Index.js yüklenir.
index.js dosyası
index.js bir fonksiyon çarpımını ve x ile y değişkenlerini tanımlar:
ihracat fonksiyonu ürünü ( a, b ) {geri dönmek A * B ;
}
ihracat yapı = 10 ;
ihracat yapı Ve = 'taylor'
dosya.js
index.js dosyasındaki işlevler file.js adlı diğer js dosyasında kullanılabilir. File.js şuna benzer:
içe aktarmak { çarpım, x, y } itibaren './index.js' ;konsol. kayıt ( ürün ( 10 , 5 ) ) ; // 50 değerini gösterecek
konsol. kayıt ( X ) ; // 10'u gösterecek
konsol. kayıt ( Ve ) ; // 'TAYLOR' görüntülenecek
Çıktı
Aşağıdaki çıktı, tarayıcı ortamında 'gerekli tanımlanmadı' hatasının ES6 içe aktarma modülü kullanılarak nasıl kaldırılabileceğini gösterir:
Durum 2: Node.js'de Çalışırken Hata
package.json dosyasında type özelliğinin value modülüyle ayarlanması bu hatayı alıyor. Bu durum, .mjs uzantılı dosyada require() işlevinin kullanılması durumunda da meydana gelebilir.
Modüle ayarlanan type özelliği kaldırıldığında ve .mjs uzantılı herhangi bir dosya .js olarak yeniden adlandırıldığında bu hata ortadan kaldırılabilir.
//paket.json{
// require() işlevini kullanmak için modüle ayarlanan type özelliğini kaldırın
'tip' : 'modül' ,
}
index.js dosyası
index.js dosyası bir fonksiyon 'ürün'ünü ve değişken kapsamıyla birlikte x ve y değişkenlerini tanımlar. index.js dosyası şu şekilde görünecektir:
fonksiyon ürünü ( a, b ) {geri dönmek A * B ;
}
küresel. X = 13 ;
küresel. Ve = 'süratli' ;
modülü. ihracat = {
ürün,
} ;
dosya.js
require() anahtar sözcüğünü kullanarak işlev ürününü index.js JS dosyasından alır. File.js dosyası şöyle görünecektir:
yapı { ürün } = gerekmek ( './index.js' ) ;konsol. kayıt ( ürün ( 10 , 9 ) ) ; // 90 değerini gösterecek
konsol. kayıt ( X ) ; // 13'ü gösterecek
konsol. kayıt ( Ve ) ; // 'hızlı' görüntülenecek
Çıktı
Çıktı, package.json dosyasından module olarak ayarlanan tür özelliğinin kaldırılmasıyla 'Gereksinim bulunamadı' hatasının nasıl çözülebileceğini gösterir:
Hatırlanacak şeyler
- Bir modülü içe aktarmak için ES6 modülü sözdizimi, modül dosyasının uzantısı hakkında spesifik olmayı gerektirir. JavaScript'in düzgün işlenmesi için dosya türünü bilmesi gerekir.
- ES6 modülü require() işleviyle aynı anda kullanılamaz.
Çözüm
Tarayıcıda ES6 modülü sözdizimini kullanmak 'gereksinim tanımlanmadı' sorununu çözer; aksi takdirde kod pasajının Node.js'de çalıştırılması gerekir. Hata, bir tarayıcıda require() işlevi kullanıldığında meydana gelir. Bu yazıda “gereksinim tanımlanmadı” sorununun nasıl çözülebileceği bir örnekle ele alındı.