ماژولها در جاوااسکریپت مدرن فراتر از جابهجا کردن چند تابع ساده رفتهاند! در این بخش یاد میگیریم چطور فایلهای سون (JSON) و سیاساس (CSS) را مستقیماً مانند یک ماژول وارد کنیم و در نهایت ببینیم چطور باید این ماژولها را به فایل HTML متصل کرد تا مرورگر بدون مشکل آنها را اجرا کند.
یکی از جذابترین ویژگیهای معماری یکپارچه ماژولها، امکان بارگذاری منابعی غیر از جاوااسکریپت است. برای مثال، شما میتوانید یک فایل JSON را به صورت یک شیء (Object) جاوااسکریپتی، یا یک فایل CSS را به صورت یک شیء از نوع CSSStyleSheet وارد پروژه کنید.
از آنجا که مرورگرها به صورت پیشفرض فکر میکنند هر چیزی که وارد میکنید جاوااسکریپت است، اگر نوع فایل متفاوت باشد خطا میدهند. بنابراین، باید با استفاده از کلمه کلیدی with، نوع منبع را کاملاً مشخص کنید:
// وارد کردن یک فایل JSON
import colors from "./colors.json" with { type: "json" };
// وارد کردن یک فایل CSS
import styles from "./styles.css" with { type: "css" };
یک تدبیر امنیتی مهم: مرورگرها نوع فایل (MIME type) را بررسی و تایید میکنند. یعنی اگر آدرس
./data.jsonواقعاً به یک فایل JSON ختم نشود، عملیات با خطا مواجه میشود. این کار باعث میشود تا شما به اشتباه کدهای مخربی را به جای دادههای معمولی اجرا نکنید.
بعد از وارد کردن موفقیتآمیز، میتوانید به راحتی از آنها استفاده کنید:
// استفاده از دادههای JSON مثل یک شیء معمولی
console.log(colors.map((color) => color.value));
// اعمال استایلهای CSS به سند HTML
document.adoptedStyleSheets = [styles];
حالا وقت آن است که فایل اصلی جاوااسکریپت (مثلاً main.js) را به صفحه HTML خود متصل کنیم. ظاهر این کار شبیه به افزودن اسکریپتهای معمولی است، اما یک تفاوت بسیار مهم دارد!
شما حتماً باید ویژگی type="module" را به تگ <script> اضافه کنید تا مرورگر بفهمد این فایل یک ماژول است:
<script type="module" src="main.js"></script>
همچنین میتوانید کدهای ماژول را به صورت درونبرنامه (Inline) مستقیماً داخل خود تگ بنویسید:
<script type="module">
/* کدهای جاوااسکریپت ماژول شما در اینجا قرار میگیرد */
</script>
شما کلمات کلیدی import و export را فقط و فقط داخل ماژولها میتوانید استفاده کنید. اگر فراموش کنید type="module" را بنویسید و بخواهید چیزی را import کنید، با خطای جاوااسکریپتی مواجه میشوید:
<script>
import _ from "lodash"; // SyntaxError: import declarations may only appear at top level of a module
</script>
<script src="a-module-using-import-statements.js"></script>
بهتر است همیشه ماژولهای خود را در فایلهای مجزا بنویسید. ماژولهایی که به صورت درونبرنامه (Inline) در HTML نوشته میشوند، فقط میتوانند فایلهای دیگر را وارد (Import) کنند؛ اما اگر چیزی را صادر (Export) کنند، بقیه فایلها به آن دسترسی نخواهند داشت چون این کدها آدرس (URL) مشخصی ندارند.
نکته طلایی برای افزایش سرعت سایت: شما میتوانید ماژولها و وابستگیهای آنها را با استفاده از تگ
<link>و ویژگیrel="modulepreload"پیشبارگذاری کنید. این کار زمان لود شدن صفحات وبسایت شما را به شدت کاهش میدهد:<link rel="modulepreload" href="main.js">
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript