اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
از آنجا که الکترون از مفاهیم وب در دسکتاپ به خوبی پشتیبانی میکند، پس به راحتی میتوان از کتابخانههای تحت وب و جاوااسکرپیتی چون جی کوئری و آنگولار و ... استفاده کرد. پروژهای داریم که در آن، حین باز شدن صفحه، به کاربر پیام خوش آمد گویی نشان داده میشود:
<!DOCTYPE html> <html> <head> <script src="./jquery.min.js"></script> <meta charset="utf-8"> <title></title> <script> $(document).ready(()=> { alert("Welcome"); }); </script> </head> <body> </body> </html>
برنامه را اجرا میکنیم و در کمال تعجب میبینیم که پیامی نمایش داده نمیشود. برای اینکه بتوانیم اشکال آن را پیدا کنیم بهتر است ابزارهای سودمند توسعه و دیباگینگ کرومیوم را فراخوانی کنیم. برای باز کردن این پنجره، بعد از ایجاد شیء پنجره (فرضا نام متغیر win باشد) عبارت زیر را مینویسیم:
win.openDevTools();
برنامه را بار دیگر اجرا کنید. در سمت راست برنامه یک پنجره جدید باز میشود تا بتوانید از طریق آن به دیباگینگ Render Process بپردازید. اگر اینبار به پنجره کنسول نگاهی بیندازید متوجه میشوید که خطای داده شده به دلیل عدم شناخت $ بوده است؛ در صورتی که همه چیز به طور صحیح قرار گرفته است و در یک صفحه وب عادی خیلی راحت اجرا میشود، پس مشکل از کجاست؟
module و module.exports
در اکثر کتابخانههای جاوااسکریپتی شما با عبارت require زیاد مواجه شدهاید و این امکان از طریق شیءایی به نام module.exports امکان پذیر شده است. شما با کدی مشابه زیر:
module و module.exports
در اکثر کتابخانههای جاوااسکریپتی شما با عبارت require زیاد مواجه شدهاید و این امکان از طریق شیءایی به نام module.exports امکان پذیر شده است. شما با کدی مشابه زیر:
exports.sayHelloInEnglish=()=> { console.log("hello"); } exports.sayHelloInPersian=()=> { console.log('salam'); }
const test=require("./test.js"); test.sayHelloInPersian(); test.sayHelloInEnglish();
همانطور که میبینید شیء module.exports از این طریق میتواند در دسترس دیگران قرار بگیرد. حالا جی کوئری و هر کتابخانه مشابهی که کدی شبیه به کد زیر را داشته باشد میتواند به چنین مشکلی دچار شود:
کد بالا بررسی میکند که آیا module.export وجود دارد یا خیر. اگر وجود داشته باشد، در اختیار آن قرار میگیرد و اگر نداشته باشد در اختیار شیء window قرار میگیرد. پس کاری که جی کوئری اینجا انجام میدهد این است که توابع آن در اختیار شیء window نیست و در اختیار exports است. به همین علت ما باید شیء جی کوئری را از طریق آن دریافت کنیم. پس کد زیر را قبل از کدهای جی کوئری مینویسیم:
if ( typeof module === "object" && typeof module.exports === "object" ) { // set jQuery in `module` } else { // set jQuery in `window` }
کد بالا بررسی میکند که آیا module.export وجود دارد یا خیر. اگر وجود داشته باشد، در اختیار آن قرار میگیرد و اگر نداشته باشد در اختیار شیء window قرار میگیرد. پس کاری که جی کوئری اینجا انجام میدهد این است که توابع آن در اختیار شیء window نیست و در اختیار exports است. به همین علت ما باید شیء جی کوئری را از طریق آن دریافت کنیم. پس کد زیر را قبل از کدهای جی کوئری مینویسیم:
<script src="./jquery.min.js"></script> <script> window.$=window.jQuery=module.exports; </script>
window.$ = window.jQuery = require('./jquery.min.js');