JS — Klasördeki Tüm Dosyaları Projeye Eklemek: requireDir
Uzun zamandır Node.js & Express.js ve MongoDB kullanan bir Rest API boilerplate projesi oluşturmayı düşünüyordum. Bu hafta sonunda bu projeye başlamak için bir fırsat buldum ve kolları hemen sıvadım. Henüz daha reponun yolun çooook başında olduğunu da belirtmek isterim.
Bu proje dahilinde tüm class dosyalarımı tek bir dosya üzerinden projeme ekleme ihtiyacı duydum. Daha önceleri kendim bunun kodunu yazarken, daha iyi ne kullanabilirim diye araştırma isteği oluştu. Biraz araştırdıktan sonra requireDir ile ilerlemeyi uygun buldum. Çünkü tekerliği tekrardan icat etmeye ve boş yere vakit kaybetmeye gerek yok. Hele ki open source olarak faydalı bir paket bulduysanız.
Aslında const express = require(‘express’) bundan çok da farklı olmayan bir mantıkla kurgulanan bu paket, size tüm klasörü projeye dahil etme olanağı sağlıyor. Belki yeni Ecmascript versiyonlarında bu özelliğe de yer verebilirler, neden olmasın?
requireDir Kullanımı
https://github.com/mustafacagri/node-express-mongodb-rest-api-boilerplate burada yer alan projeye bakarsanız, classes isminde bir klasör göreceksiniz. İçerisinde de birden fazla dosya ve klasör bulunuyor.
classes klasöründeki index.js’e baktığımızda şu satırları göreceğiz:
const requireDir = require(‘require-dir’)
const classes = requireDir(‘./’, { recurse: true })
module.exports = classes
Öncelikle require-dir paketini npm i require-dir ile localimize alıyoruz. Ardında da index.js’in ilk satırında bu paketi dosyamıza getiriyoruz.
const classes = requireDir(‘./’, { recurse: true }) ardından bu satır sayesinde de /classes klasörü altındaki tüm dosyaları ve klasörleri require etmiş oluyoruz. { recurse: true } parametresi gözünüze çarpmış olabilir. Bu alt klasörleri de require etmenize yarayan bir özellik. Paketin npm sayfasında detaylı kullanımlar ve örnekler de mevcut.
İşte bu kadar. Peki aslında ben bunu nerelerde ve nasıl kullanıyorum kısmına gelelim.
/routes/posts.js dosyasına göz attığınızda üst bölümde şu satırla karşılacaksınız.
const { response, request, db } = require(‘../classes’)
Burada request.js, response klasörü ve db klasörü projemize dahil olmuş oluyor. Bunların kullanımları da bu sayfa içerisinde görülüyor.
Klasörlerin ve dosyaların require edilmesinde farklılıklar olacağını kolayca göreceksiniz.
let data = request([‘title’, ‘description’], req.body)
Burada request.js’teki request fonksiyonunu normal bir fonksiyon olarak kullanabiliyoruz.
res.json(new response.success(posts))
Buradaki success classını ise response.success olarak kullanılıyoruz çünkü response klasörünün altındaki success.js dosyasında yer alıyor.
Örnek Kullanım
Daha detaylı bilgiye https://www.npmjs.com/package/require-dir adresinden de ulaşabilirsiniz.
Eğer ki sizin kullandığınız farklı yöntemler ya da paketler varsa, lütfen yorum olarak belirtmekten çekinmeyin.
Bir sonraki yazıda görüşmek dileğiyle…