Node.js require ve export kullanımları
Tags: javascript, node, export, require
Published: 2021-12-01 20:43:07

Node.js’de kullandığımız `require` ve `module.exports` ifadelerinin kullanım şekilleri başlarda tam anlaşılmayabiliyor. Bu yazımda elimden geldiğince bunları anlatmaya çalışacağım.

Dosyamızdaki fonksiyonları veya tanımlamaları başka bir dosyaya gönderebilmek için `module.exports` ifadesini, gönderilen dosyaları mevcut dosyaya dahil etmek için ise `require ` ifadelerini kullanırız.

## Bir ifadeyi export ile aktarmak
> module.js dosyamızdaki kodlar
```javascript
const f = () => {
    console.log('f fonksiyonu - module.js');
};
```
Yukarıdaki `f` fonksiyonunu başka dosyalarda kullanmak için **mevcut dosyadan module.exports, kullanacağımız sayfadan ise require** ile dahil etmemiz gerekiyor. 

Yukarıdaki cümleye göre hareket edersek `f` fonksiyonunu `app.js` sayfasında kullanmak için dosyanın sonuna `module.exports = f` yazmalıyız.
Bu ifade ile `f` fonksiyonumuzu `export` etmiş oluruz. Geriye sadece `require` ile çağırmak kalıyor.

> app.js dosyamızdaki kodlar
```javascript
const dahil = require('./module');
dahil(); // Çıktı: f fonksiyonu - module.js 
```
`require` ifadesi ile `module.js` dosyamızdaki `export` edilen `f` fonksiyonunu `app.js` içine dahil ettik ve verdiğimiz ad ile kullanabildik. `dahil` yerine farklı bir ad da verebilirdik. Bu seçim tamamen bize kalıyor.

## Birden fazla ifadeyi export ile aktarmak
Bu sefer `f`'in yanında bir `Function Expression` daha yani `x` fonksiyonu ve `Number` değer taşıyan bir değişkenimiz olsun.
> module.js dosyamızdaki kodlar
```javascript
const f = () => {
    console.log(' f fonksiyonu - module.js');
};
const x = () => {
    console.log(' x fonksiyonu - module.js');
};
const P = 3.14;
```
Bu ifadeleri `app.js` dosyasında kullanmak için ise iki yöntemimiz var.
### 1. Yöntem
İlk yöntemde `module.js` dosyamıza şu şekilde `export` etmeliyiz.
```javascript
module.exports.ffonk= f;
module.exports.xfonk= x;
module.exports.pi= P;
```
Burada belirttiğimiz `ffonk, xfonk ve pi` tamamen bize bağlı bir isimlendirme. Bu isimleri `require` ile dahil ettiğimiz dosyada çağırmak için veriyoruz.
Bu şekilde `export` edince nasıl kullanacağız derseniz de;
> app.js dosyamızdaki kodlar
```javascript
const dahil = require('./module.js');
dahil.ffonk();
dahil.xfonk();
console.log(dahil.pi);
/* Çıktılar
f fonksiyonu - module.js
x fonksiyonu - module.js
3.14
*/
```
### 2. Yöntem
İkinci yöntemde ise ilkine göre daha basit bir şekilde `export` etmek mümkün. Bunun için `module.exports` kodunu şu şekilde yazmalıyız.
`module.exports = { f, x, P };`

Bu şekilde `export` ettiğimizde `app.js` dosyasında şu şekilde kullanabiliriz.
```javascript
const dahil = require('./module');
dahil.f();
dahil.x();
console.log(dahil.P);
```

Bu kullanım ilkine göre daha yaygın ve kullanışlıdır. Bunun sebebi ise bu şekilde sadece işimize yarayan ifadeyi dahil edebiliriz. Bunu `Object Destructuring` ile yapabiliriz.
Örneğin `const { f }= require('./module')` şeklinde dahil edersek `x ve P` ifadelerini dahil etmeden `f` fonksiyonunu dahil etmiş oluruz.
İki tanesini dahil etmek istersek `const { f, x }= require('./module')` kodunu kullanabiliriz.

`Object Destructuring` yönteminin güzel bir özelliği ile birlikte dahil ettiğimiz ifadeye özel isim de verebiliriz. Örneğin `f` fonksiyonunu ve `P` ifadesini isimlendirelim ve çağıralım.
```javascript
const { f: sinan, P: piSayisi } = require('./module');
sinan();
console.log(piSayisi);
/* Çıktılar
f fonksiyonu - module.js
3.14
*/
```

İsimlendirme yaparak ilk yöntemin sağlamış olduğu özelliği bu şekilde ikinci yöntemde de kullanabiliyoruz.
Benim tercihim ikinci yöntem çünkü daha yaygın bir kullanıma sahip.

> `require` ile dosyayı dahil ederken `./module` ile `./module.js` arasında bir fark bulunmuyor. Yukarıdaki örneklerde olduğu gibi iki türlü de kullanabilirsiniz.

Yazımı okuduğunuz için teşekkürler. Sonraki yazılardan haberdar olmak için beni aşağıdaki sosyal medya hesaplarımdan takip edebilirsiniz.

[LinkedIn](https://www.linkedin.com/in/sinanmercury)
[Instagram](https://www.instagram.com/sinanmercury)
[GitHub](https://github.com/sinandmr)