Asas Node.js – Module Wrapper Function

<Tutorial >

Baru-baru ni aku ada update post Asas Node.js – Import/export module. Memandangkan aku dah sentuh sikit pasal module kat situ jadi aku nak sentuh juga sedikir mengenai module wrapper function.

Setiap module sebenarnya tidaklah execute kod didalamnya secara terus. Contohnya:

app.js

var age = 27;

function showAge(){
  console.log(age);
}

“under the hood” sebenarnya content app.js akan di ‘convert’ kepada sesuatu seperti ini:

(function (exports, require, module, __filename, __dirname) {

var age = 27;

function showAge(){
  console.log(age);
}

})

Kod sebenar adalah lebih complex. ini adalah simplified version yang aku buat untuk menerangkan sebenarnya module nodejs tidak execute contentnya secara terus tapi sentiasa di ‘wrap’ dalam ‘Immediately Invoked Function Expression (IIFE)’. Function yang ‘wrap’ content module inilah yang dinamakan sebagai Module Wrapper Function.

Jika kita lihat IFFE at di atas, kita dapat lihat parameter/argument mengandungi:

  • exports
  • require
  • module
  • __filename
  • __dirname

Untuk parameter require & module, kita dah sentuh di post Asas Node.js – Import/export module. Kita dapat lihat disini sebenarnya require berada di skop lokal module tersebut bukannya skop global.

Parameter/argument exports ini adalah sebenarnya hanya reference kepada module.exports. Untuk ringkasnya kita juga boleh lakukan begini.

logger.js

function log(text){
    console.log(text)
}

exports.log = log;

Disebabkan ia hanyalah satu reference. Kita tak boleh tukar jenisnya dari objek kepada jenis lain. Lihat contoh dibawah:

function log(text){
    console.log(text)
}

exports = log; // SALAH! TIDAK BOLEH!

Contoh diatas ini SALAH & TIDAK BOLEH DIBUAT kerana ianya hanyalah reference kepada module.exports kita tak boleh ubah reference itu. Jadi aku sentiasa recommend untuk selalu gunakan module.exports untuk export.

Parameter seterusnya adalah __filename mewakili nama file module tersebut. Parameter __dirname pula mewakili path file module tersebut.

logger.js

console.log(__filename);
console.log(__dirname);

Jika kita run node logger.js. Result adalah seperti berikut:

/Users/ceghap/codes/learn_node/logger.js
/Users/ceghap/codes/learn_node

Sekian 😀

Belanja saya kopi

Artikel lain

Fahami React Context API

Sebagai developer reactjs yang baharu macam aku, aku selalu gunakan teknik prop drilling untuk pass prop ke child component yang aku buat. Cara ini tak bagus kalau projek kita itu adalah projek yang besar. Aku tahu mengenai kewujudan react context API atau state management library lain seperti redux, mobx, recoil dan banyak lagi library untuk… Continue reading Fahami React Context API

Asas Node.js – Built-in module

Dalam Node.js terdapat tidaklah terlalu banyak built-in module. Tapi aku tak akan bincangkan kesemua module tersebut. Aku hanya akan bincangkan beberapa built-in module yang agak penting & digunakan agak kerap ketika pembangunan aplikasi node.js. Antaranya adalah: Path module OS module File System Module Events Module HTTP Module Path module Digunakan untuk handle file path. Contohnya… Continue reading Asas Node.js – Built-in module