16. ماژول ها در Node.js

بعد از یه غیبت دو هفته ای برگشتم.

بی مقدمه : به هر فایلی که در Node.js داریم یک ماژول گفته میشه.

دو مدل ماژول داریم:

  1. User - Define
  2. Built - In

ممکنه شما یک فایل به اسم Data.js درست کنید ، که یک ماژول به حساب میاد. یا از ماژول های نوشته شده توسط خود Node.js استفاده کنید. اگر خواستید از ماژول های Built - In استفاده کنید ، کافیه به شکل زیر اون رو به فایلتون اضافه کنید:

const fs = require ( ' fs ' );

پ.ن : fs از ماژول های Node.js می باشد.

اما اگر خواستید از ماژول هایی که خودتون نوشتید استفاده کنید ، باید به یکی از دو روش زیر اقدام کنید:

روش اول :

// data.js
const person = [ name = 'Amir', age = '28', gender = 'male' ]
module.exports = person;

نحوه export کردن در خط سوم کد مشخص می باشد. به این معنی که شی یا تابع export شده در سایر ماژول ها قابل دسترسی خواهد بود. به این صورت می تونید توی ماژول های دیگه ازش استفاده کنیم:

const user = require('./data');
console.log(user);

ذکر دوتا نکته رو لازم می دونیم.

نکته یک : اول چیزی که توی پرانتز جلوی require می نویسید در واقع آدرس نسبی همون ماژول تون هست( البته نیاز به پسوند .js ندارد.

نکته دو : محتویات user ، شامل همان چیزی می باشد که در ماژول Data ، به عنوان خروجی Export شده است که میتونه یک شی یا تابع باشد.

روش دوم :

exports.person = [ nam = 'Amir', age = '28', gender = 'male' ]

در روش دیگه از module.exports در انتهای ماژول استفاده نمی کنید و همون موقع تعریف کردن شی یا تابع با استفاده به کلمه کلیدی exports مشخص میکنید که این شی یا تابع در دسترس سایر ماژول ها نیز قرار دارد. به این طریق ازش استفاده می کنید:

const user = require('./data');
console.log(user);

دقیقا به همون شکل :)))

اماااااااااااا یه فرقی داره اینجا ، قبلش یک چیزی بگم درباره تفاوت روش اول و دوم بعد میگیم این user که در روش دوم داریم چه فرقی با user در روش اول دارد.

در روش اول از هر ماژول فقط یک شی یا تابع را می توانید export کنید ، اما در روش دوم می توانید تعدادی شی یا تابع را export کنید.

درباره این قضیه یه مثال میزنم که موضوع شفاف بشه. اما فعلا بریم سراغ فرق اون دوتا user.

ببینید در روش اول ، خب فقط یک شی رو میتونیم export کنیم. پس وقتی در یک فایل دیگه اون ماژول رو require میکنیم ، کاملا مشخص هست که user شامل کدوم شی یا تابع می شه . چون فقط یک شی export شده که در مثال ما person هست.

اما در روش دوم شما ممکنه چندین شی رو export کنید. در این user یک شی شامل تمام اشیا و توابعی هست که در ماژول شما export شدن.


برای درک بهتر موضوع فرض کنید در ماژول دو شی داریم و قصد داریم هر دو رو export کنیم( پس مجبوریم از روش دوم استفاده کنیم)

//data.js
exports.person = [ nam = 'Amir', age = '28', gender = 'male' ]
exports.phone = [ brand = 'apple', model = '13 pro max' ]

در ماژول دیگه به همون صورتی که گفتیم این ماژول date رو require می کنیم:

const user = require('./data');
console.log(user);

اگر برنامه رو ران کنید خروجی به این صورت هست:

{ person: [ 'Amir', '28', 'male' ], phone: [ 'apple', '13 pro max' ] }

مشاهده میکنید که user در اینجا یک شی هست خودش که شامل تمام موارد export شده می باشد. حالا اگر شما قصد دارید فقط یکی از شی ها رو require کنید توی فایلتون به این صورت:

const user = require('./data').person;
console.log(user);

یا اگر کل ماژول data رو require کردید و در جای خاص نیاز به دسترسی به یکی از اشیا بود به صورت زیر :

const user = require('./data');
console.log(user.person);
console.log(user.phone);

خسته نباشید.