از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش استفاده از module.exports در Node.js استفاده از ماژولها بخش مهمی از ساخت برنامهها و سیستمهای نرمافزاری کامل با استفاده از Node.js است. در غیاب ماژول ها، کد شما تکه تکه می شود و اجرای آن دشوار خواهد بود، چه رسد به حفظ در طول زمان. اما ماژول چیست؟ و اینکه دقیقاً چگونه باید از module.exports استفاده کنید…
سرفصلهای مطلب
استفاده از ماژول ها بخش ضروری ساخت برنامه های کاربردی و سیستم های نرم افزاری کامل با استفاده از Node.js است. در غیاب ماژول ها، کد شما تکه تکه می شود و اجرای آن دشوار خواهد بود، چه رسد به حفظ در طول زمان. اما ماژول چیست؟ و دقیقاً چگونه باید استفاده کنید module.exports
برای ساخت برنامه های Node.js خود؟
ماژول یک برنامه مجزا است که در یک فایل در Node.js موجود است. بنابراین ماژول ها با یک ماژول در هر فایل به فایل ها گره خورده اند. ماژول ها به زبان های برنامه نویسی دیگر در دسترس هستند. Node.JS از سیستم ماژول های CommonJS استفاده می کند، اما انواع ماژول های دیگری نیز در اکوسیستم جاوا اسکریپت استفاده می شوند. برجسته ترین این سیستم های ماژول دیگر عبارتند از: تعریف ماژول ناهمزمان (AMD) و سیستم های ماژول (ECMAScript 6) ES6.
همانطور که خواهیم دید، module.exports
شیئی است که ماژول فعلی هنگامی که در برنامه یا ماژول دیگری “نیاز” است آن را برمی گرداند.
شما می توانید عملکرد ماژول های دیگر را در هر ماژول دیگری قرار دهید. برای انجام این کار به عنوان “نیازمند” ماژول گفته می شود، که به سادگی یک شی خاص خاص را فراخوانی می کند که عملکرد ماژول را نشان می دهد.
به اشتراک گذاری کد با module.exports
برای استفاده روزمره، ماژول ها به ما اجازه می دهند تا برنامه های بزرگتر را از قطعات کوچکتر بسازیم. ماژول ها تبدیل شدن به بلوک های ساختمانی نرم افزار بزرگتر که در مجموع آنها را تعریف می کنند.
در زیر کاورها، ماژول خود را از طریق یک شی به نام ردیابی می کند module
. بنابراین، در داخل هر ماژول، “ماژول” به شیئی اشاره دارد که ماژول فعلی را نشان می دهد. این شیء متادیتای مربوط به ماژول، مانند نام فایل ماژول، و همچنین شناسه ماژول را در خود نگه می دارد.
در اینجا یک قطعه کد کوچک است که می توانید برای مشاهده مقادیر این ویژگی های مثال اجرا کنید روی یک ماژول:
// module1.js
console.log(module.filename);
console.log(module.id);
console.log(module.exports);
شما می توانید این را با استفاده از دستور اجرا کنید node module1.js
. برای مثال خواهید دید که module.filename
ویژگی روی یک مسیر فایل تنظیم می شود که با نام صحیح فایلی که این ماژول در آن وجود دارد، به پایان می رسد module1.js
. در اینجا یک نمونه خروجی برای کد بالا آورده شده است:
$ node module1.js
/Users/scott/projects/sandbox/javascript/module-test/module1.js
.
{}
در Node.js، عمل در دسترس قرار دادن کد یک ماژول برای سایر ماژول ها برای استفاده، مقادیر «صادرات» نامیده می شود.
اما اگر قرار است یک نرمافزار پیچیده از ماژولهای جداگانه ساخته شود، ممکن است از قبل به سؤالات بعدی فکر کنید:
سوال مهم شماره 1: Node.js چگونه ماژول “اصلی” را برای شروع اجرای برنامه شناسایی می کند؟
Node.js ماژول اصلی را برای اجرا توسط آرگومان هایی که به آن ارسال می شود شناسایی می کند node
قابل اجرا به عنوان مثال اگر ما یک ماژول موجود در فایل داشته باشیم server.js، به همراه سایر بخش های برنامه ما در فایل ها موجود است login.js و music_stream.js، فراخوانی دستور node server.js
را شناسایی می کند سرور ماژول به عنوان اصلی. آن ماژول اصلی، به نوبه خود، عملکرد ماژولهای دیگر را با «نیاز کردن» آنها فرا میخواند.
سوال مهم شماره 2: چگونه یک ماژول کد خود را با ماژول های دیگر به اشتراک می گذارد؟
این module
شی دارای خاصیت خاصی است که نامیده می شود exports
، که وظیفه تعریف آنچه که یک ماژول برای سایر ماژول ها در دسترس قرار می دهد را تعیین می کند. در اصطلاحات Node.js، module.exports
مقادیری را که ماژول صادر می کند تعریف می کند. به یاد داشته باشید که “صادرات” به سادگی در دسترس قرار دادن اشیا یا مقادیر برای ماژول های دیگر است import و استفاده کنید.
بنابراین، ما می توانیم export هر مقدار یا تابع یا شی دیگری که می خواهیم export با ضمیمه کردن آن به عنوان یک ویژگی از module.exports
هدف – شی. به عنوان مثال، اگر ما می خواهیم export متغیری به نام temperature
، می توانیم آن را برای استفاده در خارج از ماژول به سادگی با افزودن آن به عنوان یک ویژگی جدید در دسترس قرار دهیم module.exports
به شرح زیر است:
module.exports.temperature = temperature;
صادرات و نیاز به توابع و متغیرها با module.exports
اکنون که معنای مفهومی یک ماژول و همچنین چرایی استفاده از ماژول ها را دیدیم، بیایید این ایده ها را با ایجاد یک ماژول، تعریف توابع، و سپس صادرات آن توابع به طوری که توسط ماژول های دیگر مورد استفاده قرار گیرند، عملی کنیم.
به عنوان مثال، در اینجا یک ماژول جدید است که توصیه های کتاب را ارائه می دهد. در کد زیر یک متغیر و همچنین چند تابع تعریف کرده ام. بعداً از ماژول دیگری به عملکرد این توصیه های کتاب دسترسی خواهیم داشت.
// book_recommendations.js
// stores the favorite author in a constant variable
const favoriteAuthor = { name: "Ken Bruen", genre: "Noir", nationality: "Irish" };
// returns the favorite book
function favoriteBook() {
return { title: "The Guards", author: "Ken Bruen" };
}
// returns a list of good books
function getBookRecommendations() {
return (
{id: 1, title: "The Guards", author: "Ken Bruen"},
{id: 2, title: "The Stand", author: "Steven King"},
{id: 3, title: "The Postman Always Rings Twice", author: "James M. Cain"}
);
}
// exports the variables and functions above so that other modules can use them
module.exports.favoriteAuthor = favoriteAuthor;
module.exports.favoriteBook = favoriteBook;
module.exports.getBookRecommendations = getBookRecommendations;
ما تمام متغیرها و توابع مورد نظر خود را اضافه کرده ایم export به module.exports
به عنوان ویژگی های جسم ما به تازگی به هدف خود مبنی بر صادرات این توابع و متغیرها از آن دست یافته ایم کتاب_توصیه ها مدول.
حالا بیایید ببینیم چگونه می توانیم import این ماژول و از ماژول دیگری به عملکرد آن دسترسی پیدا کنید.
به منظور. واسه اینکه. برای اینکه import ماژول، ما باید از یک کلمه کلیدی خاص استفاده کنیم import چیزها، و به آن گفته می شود نیاز. جایی که module.exports
به ما اجازه می دهد چیزهایی را برای آن تنظیم کنیم export، require
به ما اجازه می دهد ماژول هایی را برای وارد کردن به ماژول فعلی مشخص کنیم.
قابلیت وارد کردن ماژول ها در ماژولی به نام ارائه شده است require
، در دسترس روی دامنه جهانی این ماژول اصلی است export تابعی است که مسیر ماژول مورد نظر را به آن پاس می کنیم import. به عنوان مثال، به import یک ماژول تعریف شده در music.js
، ما میخواهیم require('./music')
، جایی که مسیر نسبی را مشخص کرده ایم.
حالا ما می توانیم ببینیم که چقدر آسان است import هر چیزی با استفاده از require
. برمی گردیم به خودمان book_recommendations
ماژول، ما می توانیم import و به توابعی که صادر می کند دسترسی پیدا کنید. این در لیست کد بعدی نشان داده شده است. این ماژول پیامی را چاپ می کند که هدایای تولد توصیه شده را توصیف می کند. کتابهای توصیهشده را از ماژول توصیههای کتاب وارداتی دریافت میکند و آنها را با توصیههای موسیقی ترکیب میکند.
یک ماژول جدید مانند شکل زیر ایجاد کنید، سپس آن را همانطور که قبلا نشان داده شده اجرا کنید تا با استفاده از توابع تعریف شده در import شده آن را ببینید. کتاب_توصیه ها مدول.
// birthday_gifts.js
// import the book recommendations module
let books = require('./book_recommendations');
// gets some music recommendations as well
let musicAlbums = (
{ artist: "The Killers", title: "Live From The Royal Albert Hall" },
{ artist: "Eminem", title: "The Marshall Mathers LP" }
);
// the two best items from each category
let topIdeas = function() {
return (musicAlbums(0), books.favoriteBook());
}
// outputs a message specifying the customer's recommended gifting items
let gifts = function() {
console.log("Your recommended gifts are:\n");
console.log("######MUSIC######");
for (let i = 0, len = musicAlbums.length; i < len; i++) {
console.log(musicAlbums(i).title + " by " + musicAlbums(i).artist);
}
console.log("######BOOKS######");
let recommendedBooks = books.getBookRecommendations();
for (let i = 0, len = recommendedBooks.length; i < len; i++) {
console.log(recommendedBooks(i).title + " by " + recommendedBooks(i).author);
}
console.log("\n\nYours");
console.log("Shop Staff\n*************");
console.log("P.S. If you have a limited budget, you should just get the music album " + topIdeas()(0).title + " and the book " + topIdeas()(1).title + ".");
}
console.log("Welcome to our gift shop.\n");
// Get the gifts
gifts();
همانطور که می بینید ما استفاده کردیم require
به import را کتاب_توصیه ها مدول. در داخل ماژول جدید، میتوانیم به متغیرها و توابعی که با اضافه کردن آنها صادر شدهاند، دسترسی داشته باشیم module.exports
.
با هر دو ماژول کامل، فراخوانی node birthday_gifts.js
پیامی منظم با توصیه های کامل هدیه مشتری چاپ می کند. خروجی را در تصویر زیر مشاهده می کنید.
Welcome to our gift shop.
Your recommended gifts are:
######MUSIC######
Live From The Royal Albert Hall by The Killers
The Marshall Mathers LP by Eminem
######BOOKS######
The Guards by Ken Bruen
The Stand by Steven King
The Postman Always Rings Twice by James M. Cain
Yours
Shop Staff
*************
P.S. If you have a limited budget, you should just get the music album Live From The Royal Albert Hall and the book The Guards.
این الگوی نوشتن برنامههای Node.js از ماژولهای کوچکتر چیزی است که اغلب میبینید، مثلاً با میانافزار Express.
صادرات و نیاز به کلاس ها با module.exports
علاوه بر توابع و متغیرها می توانیم استفاده کنیم module.exports
به export سایر اشیاء پیچیده، مانند کلاس ها. اگر با استفاده از کلاس ها یا سایر اصول Node.js آشنا نیستید، می توانید نگاهی به راهنمای Node.js برای مبتدیان بیاندازید.
در مثال زیر، ما یک کلاس Cat ایجاد می کنیم که حاوی نام و سن برای اشیاء Cat است. سپس ما export کلاس Cat با پیوست کردن آن به عنوان یک ویژگی از module.exports
هدف – شی. همانطور که می بینید، این تفاوت چندانی با روش صادرات توابع و متغیرهای قبلی ندارد.
// cat.js
// constructor function for the Cat class
function Cat(name) {
this.age = 0;
this.name = name;
}
// now we export the class, so other modules can create Cat objects
module.exports = {
Cat: Cat
}
اکنون میتوانیم با وارد کردن به این کلاس Cat دسترسی پیدا کنیم cat
مدول. هنگامی که این کار انجام شد، میتوانیم اشیاء Cat جدید ایجاد کنیم و از آنها در ماژول واردکننده استفاده کنیم، همانطور که در مثال زیر نشان داده شده است. باز هم باید سعی کنید این کد را با آن اجرا کنید node cat_school.js
برای دیدن نام و سن گربه های جدید در خط فرمان شما.
// cat_school.js
// import the cat module
let cats = require('./cat');
let Cat = cats.Cat;
// creates some cats
let cat1 = new Cat("Manny");
let cat2 = new Cat("Lizzie");
// Let's find out the names and ages of cats in the class
console.log("There are two cats in the class, " + cat1.name + " and " + cat2.name + ".");
console.log("Manny is " + cat1.age + " years old " + " and Lizzie is " + cat2.age + " years old.");
همانطور که قبلاً دیدیم، صادرات یک کلاس را می توان با پیوست کردن کلاس به عنوان ویژگی از انجام داد module.exports
هدف – شی. ابتدا یک کلاس با استفاده از تابع سازنده ایجاد کردیم. سپس کلاس را با استفاده از آن صادر کردیم module.exports
. برای استفاده از کلاس، آن را در یک ماژول دیگر مورد نیاز میکنیم و نمونههایی از کلاس را ایجاد میکنیم.
برای مثال صادر کردن کلاسی که با نحو ES6 ایجاد شده است، به قسمت زیر مراجعه کنید Book
کلاس زیر
یک جایگزین: استفاده از Shorthand exports VS module.exports
در حالی که میتوانیم به تخصیص چیزها ادامه دهیم export به عنوان خواص از module.exports
، یک روش مختصر برای صادرات چیزها از ماژول وجود دارد. این روش مختصر شامل استفاده از فقط است exports
بجای module.exports
. تعدادی وجود دارد تفاوت بین این دو. نکته کلیدی که در اینجا باید به آن توجه کرد این است که شما باید مقادیر جدید خود را به عنوان ویژگی های میانبر اختصاص دهید export
شیء، و اشیاء را مستقیماً برای بازنویسی مقدار از اختصاص ندهید export
خود
در اینجا یک مثال است که در آن از این روش کوتاهنویسی استفاده میکنم export چند شی از یک ماژول به نام مدرسه_فیلم.
// film_school.js
// a beginner film course
let film101 = {
professor: 'Mr Caruthers',
numberOfStudents: 20,
level: 'easy'
}
// an expert film course
let film102 = {
professor: 'Mrs Duguid',
numberOfStudents: 8,
level: 'challenging'
}
// export the courses so other modules can use them
exports.film101 = film101;
exports.film102 = film102;
توجه کنید که چگونه اشیاء را به عنوان مثال، exports.film101 = ...
بجای exports = film101
. آن تکلیف بعدی نمی شود export متغیر است، اما صادرات میانبر خود را به طور کامل خراب کنید.
صادراتی که به روش کوتاه نویسی بالا انجام شد، میتوانست به روش بلندمدتی که ما استفاده کردهایم، محقق شود module.exports
با استفاده از خطوط زیر برای صادرات.
// export the courses so other modules can use them
module.exports.film101 = film101;
module.exports.film102 = film102;
ما هم می توانستیم export دو شی با اختصاص مستقیم یک شی به module.exports
اما این کار نمی کند exports
.
// export the courses so other modules can use them
module.exports = {
film101: film101,
film102: film102
}
این دو بسیار شبیه هم هستند و به درستی هم همینطور است. این دو راه برای دستیابی به یک چیز است، اما exports
اگر شیئی را به روشی که شما به آن اختصاص میدهید به صادرات اختصاص دهید، میتواند شما را به خطر بیندازد module.exports
.
تفاوت بین ماژول های Node.js و ماژول های ES6
ماژول های مورد استفاده در Node.js از مشخصات ماژولی که به نام the استفاده می شود پیروی می کنند CommonJS مشخصات. به روز رسانی های اخیر به زبان برنامه نویسی جاوا اسکریپت، به شکل ES6، تغییراتی را در زبان مشخص می کند و مواردی مانند نحو کلاس جدید و سیستم ماژول. این سیستم ماژول با ماژول های Node.js متفاوت است. یک ماژول در ES6 به شکل زیر است:
// book.js
const favoriteBook = {
title: "The Guards",
author: "Ken Bruen"
}
// a Book class using ES6 class syntax
class Book {
constructor(title, author) {
this.title = title;
this.author = author;
}
describeBook() {
let description = this.title + " by " + this.author + ".";
return description;
}
}
// exporting looks different from Node.js but is almost as simple
export {favoriteBook, Book};
به import این ماژول، ما از ES6 استفاده می کنیم import
عملکرد، به شرح زیر است.
// library.js
// import the book module
import {favoriteBook, Book} from 'book';
// create some books and get their descriptions
let booksILike = (
new Book("Under The Dome", "Steven King"),
new Book("Julius Ceasar", "William Shakespeare")
);
console.log("My favorite book is " + favoriteBook + ".");
console.log("I also like " + booksILike(0).describeBook() + " and " + booksILike(1).describeBook());
ماژول های ES6 تقریباً به اندازه ماژول هایی که در Node.js استفاده کرده ایم ساده به نظر می رسند، اما با ماژول های Node.js ناسازگار هستند. این مربوط به روش بارگذاری ماژول ها بین دو فرمت متفاوت است. اگر از کامپایلری مانند بابل، می توانید فرمت های ماژول را ترکیب و مطابقت دهید. اگر قصد کدنویسی دارید روی سرور به تنهایی با Node.js، با این حال، می توانید به قالب ماژول برای Node.js که قبلاً به آن پرداختیم، پایبند باشید.
بیشتر بدانید
آیا می خواهید در مورد اصول Node.js بیشتر بدانید؟ من شخصاً یک دوره آنلاین را توصیه می کنم یادگیری Node.js وس باس از آنجایی که دنبال کردن ویدیوها بسیار آسانتر است و در واقع میتوانید یک برنامه کاربردی در دنیای واقعی بسازید.
نتیجه
استفاده از module.exports
به ما اجازه می دهد export مقادیر، اشیاء و استایل ها از ماژول های Node.js. همراه با استفاده از require
به import ماژول های دیگر، ما یک اکوسیستم کامل برای ترکیب برنامه های بزرگ از قسمت های کوچکتر داریم. وقتی تعدادی از ماژولها را ترکیب میکنیم که از بخشهای منحصربهفرد عملکرد مراقبت میکنند، میتوانیم برنامهها و سیستمهای نرمافزاری بزرگتر، مفیدتر، اما نگهداری آسانتر را ایجاد کنیم.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-27 18:28:03