ÐÑкÑлÑки Ð½Ð°Ñ Ð·Ð°ÑÑоÑÑнок з ÑаÑом збÑлÑÑÑÑÑÑÑÑ, ми Ð·Ð°Ñ Ð¾Ñемо ÑоздÑлиÑи його на кÑлÑка ÑайлÑв, Ñак Ð·Ð²Ð°Ð½Ñ Â«Ð¼Ð¾Ð´ÑлÑ». ÐодÑÐ»Ñ Ð¼Ð¾Ð¶Ðµ мÑÑÑиÑи ÐºÐ»Ð°Ñ Ð°Ð±Ð¾ бÑблÑоÑÐµÐºÑ ÑÑнкÑÑй Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ Ð¼ÐµÑи.
ÐоÑиÑÑ ÑÑивалий ÑÐ°Ñ JavaScript ÑÑнÑвав без ÑинÑакÑиÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð½Ð° Ð¼Ð¾Ð²Ð½Ð¾Ð¼Ñ ÑÑвнÑ. Це не бÑло пÑоблемоÑ, ÑÐ¾Ð¼Ñ Ñо ÑпоÑаÑÐºÑ ÑкÑипÑи бÑли невеликими й пÑоÑÑими.
Ðле з ÑаÑом ÑкÑипÑи ÑÑавали вÑе ÑкладнÑÑими, ÑÐ¾Ð¼Ñ ÑпÑлÑноÑа винайÑла ÑÑзноманÑÑÐ½Ñ ÑпоÑоби оÑганÑзÑваÑи код Ñ Ð¼Ð¾Ð´ÑлÑ. ÐâÑвилиÑÑ Ð±ÑблÑоÑеки Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼ÑÑного заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´ÑлÑв.
ÐапÑиклад:
- AMD â одна з найÑÑаÑÑÑÐ¸Ñ Ð¼Ð¾Ð´ÑлÑÐ½Ð¸Ñ ÑиÑÑем, ÑпоÑаÑÐºÑ ÑеалÑзована бÑблÑоÑÐµÐºÐ¾Ñ require.js.
- CommonJS â модÑлÑна ÑиÑÑема, ÑÑвоÑена Ð´Ð»Ñ ÑеÑвеÑа Node.js.
- UMD â Ñе одна модÑлÑна ÑиÑÑема, пÑопонÑÑÑÑÑÑ Ñк ÑнÑвеÑÑалÑна, ÑÑмÑÑна з AMD Ñ CommonJS.
Ð¢ÐµÐ¿ÐµÑ ÑÑÑ Ð²Ð¾Ð½Ð¸ поÑÑÑпово ÑÑаÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑоÑÑÑ, Ñ Ð¾Ñа ÑÑ Ð¼Ð¾Ð¶Ð½Ð° знайÑи в ÑÑаÑÐ¸Ñ ÑкÑипÑÐ°Ñ .
СиÑÑема модÑлÑв на ÑÑÐ²Ð½Ñ Ð¼Ð¾Ð²Ð¸ зâÑвилаÑÑ Ñ ÑÑандаÑÑÑ JavaScript Ñ 2015 ÑоÑÑ Ñа поÑÑÑпово еволÑÑÑонÑвала. Ðа Ñей ÑÐ°Ñ Ð²Ð¾Ð½Ð° пÑдÑÑимÑÑÑÑÑÑ Ð±ÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв Ñа Node.js. ÐÐ°Ð»Ñ Ð¼Ð¸ вивÑаÑимемо Ñаме ÑÑ.
Що Ñаке модÑлÑ?
ÐодÑÐ»Ñ â Ñе Ñайл. Ðдин ÑкÑÐ¸Ð¿Ñ â Ñе один модÑлÑ.
ÐодÑÐ»Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑажÑваÑи один одного Ñа викоÑиÑÑовÑваÑи диÑекÑиви export Ñа import, Ñоб обмÑнÑваÑиÑÑ ÑÑнкÑÑоналÑнÑÑÑÑ, викликаÑи ÑÑнкÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ модÑÐ»Ñ Ð· ÑнÑого:
exportвÑдзнаÑÐ°Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ñа ÑÑнкÑÑÑ, ÑÐºÑ Ð¼Ð°ÑÑÑ Ð±ÑÑи доÑÑÑÐ¿Ð½Ñ Ð¿Ð¾Ð·Ð° поÑоÑним модÑлем.importдозволÑÑ ÑмпоÑÑÑваÑи ÑÑнкÑÑоналÑнÑÑÑÑ Ð· ÑнÑÐ¸Ñ Ð¼Ð¾Ð´ÑлÑв.
ÐапÑиклад, ÑкÑо ми маÑмо Ñайл sayHi.js, Ñкий екÑпоÑÑÑÑ ÑÑнкÑÑÑ:
// ð sayHi.js
export function sayHi(user) {
alert(`ÐÑивÑÑ, ${user}!`);
}
â¦Ð¢Ð¾Ð´Ñ ÑнÑий Ñайл може ÑмпоÑÑÑваÑи ÑÑ Ñа викоÑиÑÑовÑваÑи:
// ð main.js
import {sayHi} from './sayHi.js';
alert(sayHi); // ÑÑнкÑÑÑ...
sayHi('Ðван'); // ÐÑивÑÑ, Ðван!
ÐиÑекÑива import заванÑажÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð·Ð° ÑлÑÑ
ом ./sayHi.js до поÑоÑного ÑÐ°Ð¹Ð»Ñ Ñа запиÑÑÑ ÐµÐºÑпоÑÑÐ¾Ð²Ð°Ð½Ñ ÑÑнкÑÑÑ sayHi Ñ Ð²ÑдповÑÐ´Ð½Ñ Ð·Ð¼ÑннÑ.
ÐапÑÑÑимо пÑиклад Ñ Ð±ÑаÑзеÑÑ.
ÐÑкÑлÑки модÑÐ»Ñ Ð¿ÑдÑÑимÑÑÑÑ ÑÑд ÑпеÑÑалÑниÑ
клÑÑовиÑ
ÑлÑв Ñа ÑнÑиÑ
оÑобливоÑÑей, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ñвно ÑказаÑи бÑаÑзеÑÑ, Ñо його ÑлÑд ÑпÑиймаÑи Ñк модÑлÑ. ÐÐ»Ñ ÑÑого Ñ Ð°ÑÑибÑÑ <script type="module">.
ÐÑÑ Ñак:
export function sayHi(user) {
return `Hello, ${user}!`;
}<!doctype html>
<script type="module">
import {sayHi} from './say.js';
document.body.innerHTML = sayHi('John');
</script>ÐÑаÑÐ·ÐµÑ Ð°Ð²ÑомаÑиÑно заванÑажиÑÑ Ñа запÑÑÑиÑÑ ÑмпоÑÑований модÑÐ»Ñ (Ñ ÑÑ, Ñо вÑн ÑмпоÑÑÑÑ, ÑкÑо ÑÑеба), а поÑÑм запÑÑÑиÑÑ ÑкÑипÑ.
ЯкÑо ви ÑпÑобÑÑÑе вÑдкÑиÑи веб-ÑÑоÑÑÐ½ÐºÑ Ð»Ð¾ÐºÐ°Ð»Ñно ÑеÑез file:// пÑоÑокол, Ñо ви побаÑиÑе, Ñо диÑекÑиви import/export не пÑаÑÑÑÑÑ. ÐикоÑиÑÑовÑйÑе локалÑний веб-ÑеÑвеÑ, Ñакий Ñк static-server або ÑкоÑиÑÑайÑеÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ âживого ÑеÑвеÑаâ ваÑого ÑедакÑоÑа, напÑиклад, VS Code Live Server Extension Ð´Ð»Ñ ÑеÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑлÑв.
ÐÑÐ½Ð¾Ð²Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ð¼Ð¾Ð´ÑлÑв
Чим модÑÐ»Ñ Ð²ÑдÑÑзнÑÑÑÑÑÑ Ð²Ñд «звиÑÐ°Ð¹Ð½Ð¸Ñ Â» ÑкÑипÑÑв?
РоÑÐ½Ð¾Ð²Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ñа оÑобливоÑÑÑ, Ñо пÑаÑÑÑÑÑ Ñк Ñ Ð±ÑаÑзеÑÑ, Ñак Ñ Ð½Ð° ÑеÑвеÑÑ.
Ðавжди âuse strictâ
ÐодÑÐ»Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ пÑаÑÑÑÑÑ Ð² ÑÑÑÐ¾Ð³Ð¾Ð¼Ñ ÑежимÑ. ÐапÑиклад, пÑиÑвоÑÐ½Ð½Ñ Ð´Ð¾ неоголоÑÐµÐ½Ð¾Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ.
<script type="module">
a = 5; // помилка
</script>
Ð¡Ð²Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð·Ð¼ÑнниÑ
Ðожен модÑÐ»Ñ Ð¼Ð°Ñ Ð²Ð»Ð°ÑÐ½Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ. ÐнÑими Ñловами, змÑÐ½Ð½Ñ Ñа ÑÑнкÑÑÑ, оголоÑÐµÐ½Ñ Ð² модÑлÑ, не доÑÑÑÐ¿Ð½Ñ Ð² ÑнÑÐ¸Ñ ÑкÑипÑÐ°Ñ .
РпÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð½Ð¸Ð¶Ñе ми баÑимо два ÑмпоÑÑованиÑ
ÑкÑипÑа. СкÑÐ¸Ð¿Ñ Ð· ÑÐ°Ð¹Ð»Ñ hello.js намагаÑÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑаÑи змÑÐ½Ð½Ñ user, Ñка оголоÑена в user.js. РнаÑÑÑÐ¿Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ Ð¼Ð¸ оÑÑимаÑмо помилкÑ:
alert(user); // no such variable (each module has independent variables)let user = "John";<!doctype html>
<script type="module" src="user.js"></script>
<script type="module" src="hello.js"></script>ÐодÑÐ»Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ âекÑпоÑÑÑваÑиâ Ñе, Ñо вони вÑддаÑÑÑ Ð½Ð° ззовнÑ, Ñ âÑмпоÑÑÑваÑиâ Ñе, Ñо Ñм поÑÑÑбно.
user.jsповинен екÑпоÑÑÑваÑи змÑннÑuser.hello.jsповинен ÑмпоÑÑÑваÑи змÑÐ½Ð½Ñ Ð·user.jsмодÑлÑ.
ÐнÑими Ñловами, викоÑиÑÑовÑÑÑи модÑÐ»Ñ Ð¼Ð¸ коÑиÑÑÑÑмоÑÑ import/export замÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑниÑ
змÑнниÑ
.
ÐÑавилÑний ваÑÑанÑ:
import {user} from './user.js';
document.body.innerHTML = user; // Johnexport let user = "John";<!doctype html>
<script type="module" src="hello.js"></script>У бÑаÑзеÑÑ Ñакож ÑÑнÑÑ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð° облаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ÑкÑипÑÑ <script type="module">.
Ðа ÑÑй ÑÑоÑÑнÑÑ Ð¼Ð¸ маÑмо два ÑкÑипÑи type="module". Ðони не баÑаÑÑ Ð·Ð¼ÑÐ½Ð½Ñ Ð²ÐµÑÑ
нÑого ÑÑÐ²Ð½Ñ Ð¾Ð´Ð¸Ð½ одного:
<script type="module">
// ÐмÑнна доÑÑÑпна ÑÑлÑки в ÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð´ÑлÑ
let user = "Ðван";
</script>
<script type="module">
alert(user); // Ðомилка: змÑнна user не оголоÑена
</script>
РбÑаÑзеÑÑ Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ ÑÑвоÑиÑи глобалÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ ÑÑÐ²Ð½Ñ Ð²Ñкна бÑаÑзеÑа ÑлÑÑ
ом Ñвного пÑизнаÑÐµÐ½Ð½Ñ ÑÑ Ð´Ð¾ обâÑкÑÑ window, напÑиклад: window.user = "Ðван".
Ð¢Ð¾Ð´Ñ Ð²ÑÑ ÑкÑипÑи ÑÐ¸Ð¿Ñ type="module" Ñ Ð±ÐµÐ· нÑого бÑдÑÑÑ âбаÑиÑиâ змÑÐ½Ð½Ñ user.
Тим не менÑ, ÑÑвоÑÐµÐ½Ð½Ñ ÑÐ°ÐºÐ¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ð¸Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ Ð½ÐµÐ¿ÑийнÑÑно. ÐÑÐ´Ñ Ð»Ð°Ñка, намагайÑеÑÑ ÑникаÑи ÑÑ .
Ðод Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð»Ð¸Ñе один Ñаз пÑд ÑÐ°Ñ ÑмпоÑÑÑ
ЯкÑо один Ñ Ñой же модÑÐ»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð² декÑлÑÐºÐ¾Ñ Ð¼ÑÑÑÑÑ , його код виконаÑÑÑÑÑ ÑÑлÑки один Ñаз, пÑÑÐ»Ñ Ñого екÑпоÑÑована ÑÑнкÑÑоналÑнÑÑÑÑ Ð¿ÐµÑедаÑÑÑÑÑ Ð²ÑÑм ÑмпоÑÑеÑам.
РозÑмÑÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ñазового обÑиÑÐ»ÐµÐ½Ð½Ñ Ñ Ð¿Ð¾ÑлÑдовноÑÑÑ ÑмпоÑÑÑ Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¾Ñ Ð¾ÑÐ½Ð¾Ð²Ð¾Ñ Ð´Ð»Ñ ÑозÑмÑÐ½Ð½Ñ ÑобоÑи модÑлÑв.
ÐавайÑе подивимоÑÑ Ð¿Ñиклади.
Ðо-пеÑÑе, ÑкÑо пÑи запÑÑÐºÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ð¸Ð½Ð¸ÐºÐ°ÑÑÑ Ð¿Ð¾Ð±ÑÑÐ½Ñ ÐµÑекÑи, напÑиклад, видаÑÑÑÑÑ Ð¿Ð¾Ð²ÑдомленнÑ, Ñо ÑмпоÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð² декÑлÑÐºÐ¾Ñ Ð¼ÑÑÑÑÑ Ð¿Ð¾ÐºÐ°Ð¶Ðµ його ÑÑлÑки один Ñаз â пÑи пеÑÑÐ¾Ð¼Ñ ÑмпоÑÑÑ:
// ð alert.js
alert("ÐодÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾!");
// ÐмпоÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ Ñого ж модÑÐ»Ñ Ñ ÑÑзниÑ
ÑайлаÑ
// ð 1.js
import `./alert.js`; // ÐодÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾!
// ð 2.js
import `./alert.js`; // (нÑÑого не покаже)
ÐÑÑгий ÑмпоÑÑ Ð½ÑÑого не покаже, ÑÐ¾Ð¼Ñ Ñо Ñей модÑÐ»Ñ Ð²Ð¶Ðµ бÑв виконаний.
ÐÑнÑÑ Ð¿Ñавило: виÑокоÑÑвневий код модÑÐ»Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ бÑÑи викоÑиÑÑаний Ð´Ð»Ñ ÑнÑÑÑалÑзаÑÑÑ Ñи ÑÑвоÑÐµÐ½Ð½Ñ ÑпеÑиÑÑÑниÑ
Ð´Ð»Ñ Ð¼Ð¾Ð´ÑлÑв внÑÑÑÑÑнÑÑ
ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð¸Ñ
, а ÑкÑо ми Ñ
оÑемо, Ñоби ÑоÑÑ Ð¼Ð¾Ð¶Ð½Ð° бÑло викоÑиÑÑовÑваÑи багаÑо ÑазÑв, Ñо екÑпоÑÑÑÑмо Ñе Ñк ÑÑнкÑÑÑ, подÑÐ±Ð½Ñ Ð½Ð° ÑÑ, ÑÐºÑ Ð¼Ð¸ ÑÑвоÑили в sayHi виÑе.
Ð¢ÐµÐ¿ÐµÑ Ð±ÑлÑÑ ÑÑкладнений пÑиклад.
УÑвÑмо, Ñо модÑÐ»Ñ ÐµÐºÑпоÑÑÑÑ Ð¾Ð±âÑкÑ:
// ð admin.js
export let admin = {
name: "Ðван"
};
ЯкÑо модÑÐ»Ñ ÑмпоÑÑÑÑÑÑÑÑ Ð² кÑлÑкоÑ
ÑайлаÑ
, код модÑÐ»Ñ Ð±Ñде виконано лиÑе один Ñаз, обâÑÐºÑ admin бÑде ÑÑвоÑено Ñ Ð½Ð°Ð´Ð°Ð»Ñ Ð±Ñде пеÑеданий вÑÑм ÑмпоÑÑеÑам.
ÐÑÑ ÑмпоÑÑеÑи оÑÑимаÑÑÑ Ð¾Ð´Ð¸Ð½-Ñдиний обâÑÐºÑ admin:
// ð 1.js
import {admin} from './admin.js';
admin.name = "Pete";
// ð 2.js
import {admin} from './admin.js';
alert(admin.name); // Pete
// Ðбидва Ñайли, 1.js Ñ 2.js, ÑмпоÑÑÑÑÑÑ Ñой Ñамий обâÑкÑ
// ÐмÑни, зÑÐ¾Ð±Ð»ÐµÐ½Ñ Ð² 1.js, зâÑвлÑÑÑÑÑ Ð² 2.js
Як ви баÑиÑе, коли 1.js змÑнÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ name обâÑкÑÑ admin, ÑÐ¾Ð´Ñ ÑнÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ñеж побаÑаÑÑ ÑÑ Ð·Ð¼Ñни.
Ще Ñаз заÑважимо â модÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð»Ð¸Ñе один Ñаз. ÐенеÑÑÑÑÑÑÑ ÐµÐºÑпоÑÑ Ñ Ð¿ÑÑÐ»Ñ ÑÑого пеÑедаÑÑÑÑÑ Ð²ÑÑм ÑмпоÑÑеÑам, ÑомÑ, ÑкÑо ÑоÑÑ Ð·Ð¼ÑниÑÑÑÑ Ð² обâÑкÑÑ admin, Ñо ÑнÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ñеж побаÑаÑÑ ÑÑ Ð·Ð¼Ñни.
Така поведÑнка дозволÑÑ ÐºÐ¾Ð½ÑÑгÑÑÑваÑи модÑÐ»Ñ Ð¿Ñд ÑÐ°Ñ Ð¿ÐµÑÑого ÑмпоÑÑÑ. Ðи можемо вÑÑановиÑи його влаÑÑивоÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз, Ñ Ð² подалÑÑÐ¸Ñ ÑмпоÑÑÐ°Ñ Ð²Ñн бÑде налаÑÑованим.
ÐнÑими Ñловами, модÑÐ»Ñ Ð¼Ð¾Ð¶Ðµ забезпеÑиÑи загалÑÐ½Ñ ÑÑнкÑÑоналÑнÑÑÑÑ, Ñка поÑÑебÑÑ Ð½Ð°Ð»Ð°ÑÑÑваннÑ. ÐапÑиклад Ð´Ð»Ñ Ð°ÑÑенÑиÑÑкаÑÑÑ Ð¿ÑдгоÑÑваÑи облÑÐºÐ¾Ð²Ñ Ð´Ð°Ð½Ñ. ÐоÑÑм вÑн може екÑпоÑÑÑваÑи обâÑÐºÑ ÐºÐ¾Ð½ÑÑгÑÑаÑÑÑ, оÑÑкÑÑÑи, Ñо зовнÑÑнÑй код бÑде поÑилаÑиÑÑ Ð½Ð° нÑого.
ÐлаÑиÑний Ñаблон викоÑиÑÑаннÑ:
- ÐодÑÐ»Ñ ÐµÐºÑпоÑÑÑÑ Ð´ÐµÑÐºÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ ÐºÐ¾Ð½ÑÑгÑÑаÑÑÑ, напÑиклад, обâÑÐºÑ ÐºÐ¾Ð½ÑÑгÑÑаÑÑÑ.
- ÐÑи пеÑÑÐ¾Ð¼Ñ ÑмпоÑÑÑ Ð¼Ð¸ його ÑнÑÑÑалÑзÑÑмо, запиÑÑÑмо в його влаÑÑивоÑÑÑ. Це може зÑобиÑи ÑкÑÐ¸Ð¿Ñ Ð¿ÑогÑами веÑÑ Ð½Ñого ÑÑвнÑ.
- ÐодалÑÑÑ ÑмпоÑÑи викоÑиÑÑовÑÑÑÑ Ñей модÑлÑ.
ÐапÑиклад, модÑÐ»Ñ admin.js може забезпеÑÑваÑи Ð¿ÐµÐ²Ð½Ñ ÑÑнкÑÑоналÑнÑÑÑÑ (напÑиклад, аÑÑенÑиÑÑкаÑÑÑ), але оÑÑкÑймо, Ñо облÑÐºÐ¾Ð²Ñ Ð´Ð°Ð½Ñ Ð½Ð°Ð´Ñ
одÑÑÑ Ð² обâÑÐºÑ config ззовнÑ:
// ð admin.js
export let config = { };
export function sayHi() {
alert(`Ready to serve, ${config.user}!`);
}
Ð ÑÑÐ¾Ð¼Ñ Ð¿ÑикладÑ, admin.js екÑпоÑÑÑÑ config обâÑÐºÑ (ÑпоÑаÑÐºÑ Ð¿Ð¾ÑожнÑй, але Ñакож може маÑи влаÑÑивоÑÑÑ Ð·Ð° замовÑÑваннÑм).
ÐоÑÑм Ñ init.js, пеÑÑÐ¾Ð¼Ñ ÑкÑипÑÑ Ð½Ð°ÑÐ¾Ñ Ð¿ÑогÑами, ми ÑмпоÑÑÑÑмо config обâÑÐºÑ Ñ Ð·Ð°Ð¿Ð¸ÑÑÑмо Ð´Ð°Ð½Ñ Ð´Ð»Ñ ÑнÑÑÑалÑзаÑÑÑ config.user:
// ð init.js
import {config} from './admin.js';
config.user = "Pete";
â¦Ð¢ÐµÐ¿ÐµÑ модÑÐ»Ñ admin.js налаÑÑовано.
ÐнÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¼Ð¾Ð¶ÑÑÑ ÑмпоÑÑÑваÑи його, Ñ Ð²Ñн пÑавилÑно показÑÑ Ð¿Ð¾ÑоÑного коÑиÑÑÑваÑа:
// ð another.js
import {sayHi} from './admin.js';
sayHi(); // Ready to serve, Pete!
import.meta
ÐбâÑÐºÑ import.meta мÑÑÑиÑÑ ÑнÑоÑмаÑÑÑ Ð¿Ñо поÑоÑний модÑлÑ.
ÐмÑÑÑ Ð·Ð°Ð»ÐµÐ¶Ð¸ÑÑ Ð²Ñд оÑоÑеннÑ. У бÑаÑзеÑÑ Ð²Ñн мÑÑÑиÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ÑкÑÐ¸Ð¿Ñ Ð°Ð±Ð¾ поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° поÑоÑÐ½Ñ Ð²ÐµÐ±ÑÑоÑÑнкÑ, ÑкÑо модÑÐ»Ñ Ð²Ð±Ñдований в HTML:
<script type="module">
alert(import.meta.url); // script URL
// поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° html ÑÑоÑÑÐ½ÐºÑ Ð´Ð»Ñ Ð²Ð±Ñдованого ÑкÑипÑÑ
</script>
У модÑÐ»Ñ Â«this» не визнаÑено
Це незнаÑна оÑобливÑÑÑÑ, але Ð´Ð»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñи каÑÑини ÑÑеба згадаÑи пÑо Ñе.
У модÑÐ»Ñ Ð½Ð° веÑÑ
нÑÐ¾Ð¼Ñ ÑÑÐ²Ð½Ñ this не визнаÑено (undefined).
ÐоÑÑвнÑÑмо з не-модÑлÑними ÑкÑипÑами, Ñам this â глобалÑний обâÑкÑ:
<script>
alert(this); // window
</script>
<script type="module">
alert(this); // undefined
</script>
ÐÑобливоÑÑÑ Ñ Ð±ÑаÑзеÑаÑ
РкÑлÑка ÑнÑиÑ
, Ñаме бÑаÑзеÑниÑ
оÑобливоÑÑей ÑкÑипÑÑв повâÑзаниÑ
з type="module".
ЯкÑо ви ÑиÑаÑÑе маÑеÑÑал впеÑÑе або ÑкÑо не збиÑаÑÑеÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи модÑÐ»Ñ Ð² бÑаÑзеÑÐ°Ñ , Ñо заÑаз можеÑе пÑопÑÑÑиÑи ÑÑ ÑекÑÑÑ.
ÐодÑÐ»Ñ Ñ Ð²Ñдкладеними (deferred)
ÐодÑÐ»Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ виконÑÑÑÑÑÑ Ñ Ð²ÑÐ´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñ (deferred) ÑежимÑ, Ñак Ñамо Ñк ÑкÑипÑи з аÑÑибÑÑом defer (опиÑаний Ñ ÑоздÑÐ»Ñ Ð¡ÐºÑипÑи: async, defer). Це вÑÑно Ñ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
Ñа вбÑдованиÑ
ÑкÑипÑÑв-модÑлÑв.
ÐнакÑе кажÑÑи:
- заванÑажÑÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
модÑлÑв, ÑакиÑ
Ñк
<script type="module" src="...">, не блокÑÑÑÑ Ð¾Ð±ÑÐ¾Ð±ÐºÑ HTML, вони заванÑажÑÑÑÑÑÑ Ð² паÑалелÑÐ½Ð¾Ð¼Ñ ÑÐµÐ¶Ð¸Ð¼Ñ Ð· ÑнÑими ÑеÑÑÑÑами. - модÑлÑ, навÑÑÑ ÑкÑо заванÑажилиÑÑ Ñвидко, оÑÑкÑÑÑÑ Ð½Ð° повне заванÑÐ°Ð¶ÐµÐ½Ð½Ñ HTML докÑменÑа, Ñ ÑÑлÑки поÑÑм виконÑÑÑÑÑÑ.
- збеÑÑгаÑÑÑÑÑ Ð²ÑдноÑний поÑÑдок ÑкÑипÑÑв: ÑкÑипÑи, Ñо йдÑÑÑ ÑанÑÑе Ñ Ð´Ð¾ÐºÑменÑÑ, виконÑÑÑÑÑÑ ÑанÑÑе.
Як побÑÑний еÑекÑ, модÑÐ»Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ баÑаÑÑ Ð¿Ð¾Ð²Ð½ÑÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ñ HTML-ÑÑоÑÑнкÑ, вклÑÑаÑÑи HTML-елеменÑи пÑд ними.
ÐапÑиклад:
<script type="module">
alert(typeof button); // object: ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶Ðµ 'баÑиÑи' ÐºÐ½Ð¾Ð¿ÐºÑ Ð¿Ñд ним
// оÑкÑлÑки модÑÐ»Ñ Ñ Ð²Ñдкладеними, Ñо ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ñне виконÑваÑиÑÑ ÑÑлÑки пÑÑÐ»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ð³Ð¾ заванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑÑоÑÑнки
</script>
ÐоÑÑвнÑйÑе Ð·Ñ Ð·Ð²Ð¸Ñайним ÑкÑипÑом нижÑе:
<script>
alert(typeof button); // Ðомилка: кнопка не визнаÑена, ÑкÑÐ¸Ð¿Ñ Ð½Ðµ баÑиÑÑ Ð¿Ñд ним елеменÑи
// звиÑÐ°Ð¹Ð½Ñ ÑкÑипÑи запÑÑкаÑÑÑÑÑ Ð²ÑдÑазÑ, не ÑекаÑÑи повного заванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑÑоÑÑнки
</script>
<button id="button">Button</button>
ÐÑÐ´Ñ Ð»Ð°Ñка, звеÑнÑÑÑ ÑвагÑ: дÑÑгий ÑкÑÐ¸Ð¿Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°ÑÑÑÑÑ ÑанÑÑе нÑж пеÑÑий! Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ побаÑимо ÑпоÑаÑÐºÑ undefined, а поÑÑм object.
Це ÑомÑ, Ñо модÑÐ»Ñ Ð¿Ð¾ÑинаÑÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑваÑиÑÑ Ð¿ÑÑÐ»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ð³Ð¾ заванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑÑоÑÑнки. ÐвиÑÐ°Ð¹Ð½Ñ ÑкÑипÑи запÑÑкаÑÑÑÑÑ Ð²ÑдÑазÑ, ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð²ÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ñ Ð·Ð²Ð¸Ñайного ÑкÑипÑÑ Ð¼Ð¸ баÑимо пеÑÑим.
ÐÑи викоÑиÑÑÐ°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑлÑв нам ваÑÑо маÑи на ÑвазÑ, Ñо HTML-ÑÑоÑÑнка бÑде показана бÑаÑзеÑом до Ñого, Ñк виконаÑÑÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ñа JavaScript-пÑогÑама бÑде гоÑова до ÑобоÑи. ÐеÑÐºÑ ÑÑнкÑÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ñе не пÑаÑÑваÑи. Ðам ÑлÑд ÑозмÑÑÑиÑи «ÑндикаÑÐ¾Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ» або Ñе ÑоÑÑ, Ñоб не збенÑежиÑи Ñим вÑдвÑдÑваÑа.
ÐÑÑибÑÑ async пÑаÑÑÑ Ñ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкÑипÑаÑ
ÐÐ»Ñ Ð½ÐµÐ¼Ð¾Ð´ÑлÑниÑ
ÑкÑипÑÑв аÑÑибÑÑ async (не плÑÑаÑи з клÑÑовим Ñловом async) пÑаÑÑÑ Ð»Ð¸Ñе з зовнÑÑнÑми ÑкÑипÑами (пÑдклÑÑеними ÑеÑез src). СкÑипÑи з async запÑÑкаÑÑÑÑÑ Ð²ÑдÑÐ°Ð·Ñ Ð¿Ð¾ гоÑовноÑÑÑ, вони не ÑекаÑÑÑ Ð½Ð° ÑнÑÑ ÑкÑипÑи або HTML-докÑменÑ.
Ð Ð¾Ñ Ð´Ð»Ñ Ð¼Ð¾Ð´ÑлÑниÑ
ÑкÑипÑÑв аÑÑибÑÑ async пÑаÑÑÑ Ñ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ
ÑкÑипÑÑв, Ñ Ð´Ð»Ñ Ð²Ð±ÑдованиÑ
(пÑопиÑаниÑ
вÑеÑÐµÐ´Ð¸Ð½Ñ Ñега <script>ÑÑÑ ÐºÐ¾Ð´</script>).
ÐапÑиклад, Ñ ÑкÑипÑÑ Ð½Ð¸Ð¶Ñе Ñ async, ÑÐ¾Ð¼Ñ Ð²Ñн виконаÑÑÑÑÑ Ð¾Ð´ÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ, не ÑекаÑÑи ÑнÑиÑ
ÑкÑипÑÑв.
СкÑÐ¸Ð¿Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ ÑмпоÑÑ (заванÑажиÑÑ ./analytics.js) Ñ Ð²ÑдÑÐ°Ð·Ñ Ð·Ð°Ð¿ÑÑÑиÑÑÑÑ, навÑÑÑ, ÑкÑо HTML докÑÐ¼ÐµÐ½Ñ Ñе не заванÑаживÑÑ Ñи ÑкÑо ÑнÑÑ ÑкÑипÑи вÑе Ñе заванÑажÑÑÑÑÑÑ.
Це дÑже коÑиÑно, коли модÑÐ»Ñ Ð½Ñ Ð· Ñим не повâÑзаний, напÑиклад, Ð´Ð»Ñ Ð»ÑÑилÑникÑв, Ñеклами, обÑобникÑв подÑй.
<!-- заванÑажÑÑÑÑÑÑ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ÑÑÑ (analytics.js) Ñ ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑÑ -->
<!-- не ÑекаÑÑи заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾ÐºÑменÑÑ Ñи ÑнÑиÑ
ÑегÑв <script> -->
<script async type="module">
import {counter} from './analytics.js';
counter.count();
</script>
ÐовнÑÑÐ½Ñ ÑкÑипÑи
ÐовнÑÑÐ½Ñ ÑкÑипÑи з аÑÑибÑÑом type="module" маÑÑÑ Ð´Ð²Ñ Ð²ÑдмÑнноÑÑÑ:
-
ÐовнÑÑÐ½Ñ ÑкÑипÑи з однаковим аÑÑибÑÑом
srcзапÑÑкаÑÑÑÑÑ Ð»Ð¸Ñе один Ñаз:<!-- ÑкÑÐ¸Ð¿Ñ my.js заванÑажиÑÑÑÑ Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°ÑÑÑÑÑ ÑÑлÑки Ñаз --> <script type="module" src="my.js"></script> <script type="module" src="my.js"></script> -
ÐовнÑÑнÑй ÑкÑипÑ, Ñкий заванÑажÑÑÑÑÑÑ Ð· ÑнÑого Ð´Ð¾Ð¼ÐµÐ½Ñ (напÑиклад, ÑнÑого ÑайÑÑ), Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð·Ð°Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑв CORS, Ñк опиÑано Ñ Ð³Ð»Ð°Ð²Ñ Fetch: ÐапиÑи мÑж ÑÑзними джеÑелами. ÐнÑими Ñловами, ÑкÑо модÑлÑний ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑÑÑÑÑÑ Ð· ÑнÑого доменÑ, вÑддалений ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ вÑÑановиÑи заголовок
Access-Control-Allow-Origin, Ñо ознаÑаÑ, Ñо заванÑажиÑи ÑкÑÐ¸Ð¿Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾.<!-- another-site.com повинен вказаÑи заголовок Access-Control-Allow-Origin --> <!-- ÑнакÑе, ÑкÑÐ¸Ð¿Ñ Ð½Ðµ виконаÑÑÑÑÑ --> <script type="module" src="http://another-site.com/their.js"></script>Це забезпеÑÑÑ ÐºÑаÑÑ Ð±ÐµÐ·Ð¿ÐµÐºÑ Ð·Ð° замовÑÑваннÑм.
Ðе допÑÑкаÑÑÑÑÑ Â«Ð³Ð¾Ð»Ñ» модÑлÑ
У бÑаÑзеÑÑ import Ð¼Ð°Ñ Ð¼ÑÑÑиÑи вÑдноÑний або абÑолÑÑний ÑлÑÑ
до модÑлÑ. ÐодÑÐ»Ñ Ð±ÐµÐ· вказаного ÑлÑÑ
Ñ Ð´Ð¾ нÑого називаÑÑÑÑÑ Â«Ð³Ð¾Ð»Ð¸Ð¼Ð¸Â» (bare). Ðони не Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ Ð² ÑмпоÑÑÑ.
ÐапÑиклад, даний import непÑавилÑний:
import {sayHi} from 'sayHi'; // Ðомилка, "голий" модÑлÑ
// ÑмпоÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ маÑи ÑлÑÑ
до нÑого, напÑиклад, './sayHi.js' Ñи 'C:/test/sayHi.js' (абÑолÑÑний ÑлÑÑ
до модÑлÑ)
ÐнÑÑ Ð¾ÑоÑеннÑ, напÑиклад Node.js, допÑÑкаÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Â«Ð³Ð¾Ð»Ð¸Ñ Â» модÑлÑв, без ÑлÑÑ Ñв, ÑÐ¾Ð¼Ñ Ñо в Ð½Ð¸Ñ Ñ ÑÐ²Ð¾Ñ Ð¿Ñавила, Ñк пÑаÑÑваÑи з Ñакими модÑлÑми Ñа де ÑÑ ÑÑкаÑи. Ðле бÑаÑзеÑи поки не пÑдÑÑимÑÑÑÑ Ð³Ð¾Ð»Ñ Ð¼Ð¾Ð´ÑлÑ.
СÑмÑÑнÑÑÑÑ, ânomoduleâ
СÑаÑÑ Ð±ÑаÑзеÑи не ÑозÑмÑÑÑÑ Ð°ÑÑибÑÑ type="module". СкÑипÑи з невÑдомим Ñипом аÑÑибÑÑÑв пÑоÑÑо ÑгноÑÑÑÑÑÑÑ. Ðи можемо зÑобиÑи Ð´Ð»Ñ Ð½Ð¸Ñ
âÑезеÑвнийâ ÑкÑÐ¸Ð¿Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð°ÑÑибÑÑÑ nomodule:
<script type="module">
alert("ÐÑаÑÑÑ Ñ ÑÑÑаÑниÑ
бÑаÑзеÑаÑ
");
</script>
<script nomodule>
alert("СÑÑаÑÐ½Ñ Ð±ÑаÑзеÑи ÑозÑмÑÑÑÑ Ð¾Ð±Ð¸Ð´Ð²Ð° аÑÑибÑÑи: type=module Ñ nomodule, ÑÐ¾Ð¼Ñ Ð¿ÑопÑÑкаÑÑÑ Ñей Ñег script)
alert("СÑаÑÑ Ð±ÑаÑзеÑи ÑгноÑÑÑÑÑ ÑкÑипÑи з невÑдомим аÑÑибÑÑом type=module, але виконÑÑÑÑ Ñей.");
</script>
ÐнÑÑÑÑменÑи збиÑаннÑ
У ÑеалÑÐ½Ð¾Ð¼Ñ Ð¶Ð¸ÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð² бÑаÑзеÑÐ°Ñ ÑÑдко викоÑиÑÑовÑÑÑÑÑÑ Ñ Â«ÑиÑомÑ» виглÑдÑ. ÐазвиÑай ми обâÑднÑÑмо модÑÐ»Ñ Ñазом, викоÑиÑÑовÑÑÑи ÑпеÑÑалÑний ÑнÑÑÑÑменÑ, напÑиклад Webpack Ñ Ð¿ÑÑÐ»Ñ Ð²Ð¸ÐºÐ»Ð°Ð´Ð°Ñмо код на ÑобоÑий ÑеÑвеÑ.
Ðдна з пеÑеваг викоÑиÑÑÐ°Ð½Ð½Ñ Ð·Ð±Ð¸ÑаÑа â вÑн Ð½Ð°Ð´Ð°Ñ Ð±ÑлÑÑий конÑÑÐ¾Ð»Ñ Ð½Ð°Ð´ Ñим, Ñк модÑÐ»Ñ ÑÑкаÑÑÑÑÑ, дозволÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи Ð³Ð¾Ð»Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ñа ÑнÑÑ âвлаÑнÑâ налаÑÑÑваннÑ, напÑиклад CSS/HTML-модÑлÑ.
ÐбиÑÐ°Ñ ÑобиÑÑ Ñаке:
- ÐеÑе «оÑновний» модÑлÑ, Ñкий ми збиÑаÑмоÑÑ Ð¿Ð¾Ð¼ÑÑÑиÑи в
<script type="module">HTML. - ÐналÑзÑÑ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ÑÑÑ (ÑмпоÑÑ, ÑмпоÑÑи ÑмпоÑÑÑв ÑоÑо)
- ÐбиÑÐ°Ñ Ð¾Ð´Ð¸Ð½ Ñайл з ÑÑÑма модÑлÑми (або кÑлÑка ÑайлÑв, Ñе можна налаÑÑÑваÑи), пеÑезапиÑÑÑ Ð²Ð±Ñдований import ÑÑнкÑÑÑÑ ÑмпоÑÑÑ Ð²Ñд збиÑаÑа, Ñоб ÑÑе пÑаÑÑвало. СпеÑÑалÑÐ½Ñ Ñипи модÑлÑв, ÑÐ°ÐºÑ Ñк HTML/CSS Ñеж пÑдÑÑимÑÑÑÑÑÑ.
- У пÑоÑеÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð²ÑдбÑваÑиÑÑ Ð¹ ÑнÑÑ ÑÑанÑÑоÑмаÑÑÑ Ñа опÑимÑзаÑÑÑ ÐºÐ¾Ð´Ñ:
- ÐедоÑÑжний код видалÑÑÑÑÑÑ (код, Ñо нÑколи не виконаÑÑÑÑÑ).
- ÐкÑпоÑÑи, Ñо не викоÑиÑÑовÑÑÑÑÑÑ, видалÑÑÑÑÑÑ (âtree-shakingâ).
- СпеÑиÑÑÑÐ½Ñ Ð¾Ð¿ÐµÑаÑоÑи Ð´Ð»Ñ ÑозÑобки, ÑÐ°ÐºÑ Ñк
consoleÑаdebugger, видалÑÑÑÑÑÑ. - СÑÑаÑний ÑинÑакÑÐ¸Ñ JavaScript Ñакож може бÑÑи ÑÑанÑÑоÑмований на попеÑеднÑй ÑÑандаÑÑ, Ð·Ñ ÑÑ Ð¾Ð¶Ð¾Ñ ÑÑнкÑÑоналÑнÑÑÑÑ, напÑиклад, за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Babel.
- ÐÑÑиманий Ñайл можна мÑнÑмÑзÑваÑи (видалиÑи пÑобÑли, замÑниÑи назви змÑÐ½Ð½Ð¸Ñ Ð½Ð° бÑлÑÑ ÐºÐ¾ÑоÑÐºÑ Ð¹ Ñ.д.).
ЯкÑо ми викоÑиÑÑовÑÑмо ÑнÑÑÑÑменÑи збиÑаннÑ, вони обâÑднÑÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ñазом в один або кÑлÑка ÑайлÑв, Ñ Ð·Ð°Ð¼ÑнÑÑÑÑ import/export на ÑÐ²Ð¾Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸. Ð¢Ð¾Ð¼Ñ Ð¿ÑдÑÑмкове збиÑÐ°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° пÑдклÑÑаÑи й без аÑÑибÑÑа type="module", а Ñк звиÑайний ÑкÑипÑ:
<!-- ÐÑипÑÑÑимо, Ñо ми зÑбÑали bundle.js, викоÑиÑÑовÑÑÑи, напÑиклад, ÑÑилÑÑÑ Webpack -->
<script src="bundle.js"></script>
ХоÑа Ñ Â«Ñк Ñ» модÑÐ»Ñ Ñеж можна викоÑиÑÑовÑваÑи, а збиÑÐ°Ñ Ð½Ð°Ð»Ð°ÑÑÑваÑи пÑзнÑÑе за Ð½ÐµÐ¾Ð±Ñ ÑдноÑÑÑ.
ÐÑдÑÑмки
ÐÑдÑбâÑмо пÑдÑÑмки:
- ÐодÑÐ»Ñ â Ñе Ñайл. Щоб пÑаÑÑвав
import/export, поÑÑÑбно Ð´Ð»Ñ Ð±ÑаÑзеÑÑв вказÑваÑи аÑÑибÑÑ<script type="module">. ÐодÑÐ»Ñ Ð¼Ð°ÑÑÑ ÑÑд оÑобливоÑÑей:- ÐÑдкладене (deferred) Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð° замовÑÑваннÑм.
- ÐÑÑибÑÑ async пÑаÑÑÑ Ñ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкÑипÑÐ°Ñ .
- ÐÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÑ Ð¼Ð¾Ð´ÑлÑв з ÑнÑого джеÑела Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸ CORS.
- ÐовнÑÑÐ½Ñ ÑкÑипÑи, Ñо дÑблÑÑÑÑÑÑ, ÑгноÑÑÑÑÑÑÑ.
- ÐодÑÐ»Ñ Ð¼Ð°ÑÑÑ ÑÐ²Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ, обмÑнÑваÑиÑÑ ÑÑнкÑÑоналÑнÑÑÑÑ Ð¼Ð¾Ð¶Ð½Ð° ÑеÑез
import/export. - ÐиÑекÑива
use strictзавжди ввÑмкнена в модÑлÑ. - Ðод Ñ Ð¼Ð¾Ð´ÑлÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð»Ð¸Ñе один Ñаз. ФÑнкÑÑоналÑнÑÑÑÑ, Ñо екÑпоÑÑÑÑÑÑÑÑ, ÑÑвоÑÑÑÑÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз Ñ Ð¿ÐµÑедаÑÑÑÑÑ Ð²ÑÑм ÑмпоÑÑеÑам.
Ðоли ми викоÑиÑÑовÑÑмо модÑлÑ, кожен модÑÐ»Ñ ÑеалÑзÑÑ ÑÐ²Ð¾Ñ ÑÑнкÑÑоналÑнÑÑÑÑ Ñа екÑпоÑÑÑÑ ÑÑ. ÐоÑÑм ми викоÑиÑÑовÑÑмо import, Ñоб безпоÑеÑеднÑо ÑмпоÑÑÑваÑи ÑÑ ÑÑди, кÑди поÑÑÑбно. ÐÑаÑÐ·ÐµÑ Ð·Ð°Ð²Ð°Ð½ÑажÑÑ Ñа аналÑзÑÑ ÑкÑипÑи авÑомаÑиÑно.
У ÑеалÑÐ½Ð¾Ð¼Ñ Ð¶Ð¸ÑÑÑ ÑаÑÑо викоÑиÑÑовÑÑÑÑÑÑ Ð·Ð±Ð¸ÑÐ°Ñ Webpack, Ñоб поÑднаÑи модÑлÑ: Ð´Ð»Ñ Ð¿ÑодÑкÑивноÑÑÑ Ñа ÑнÑÐ¸Ñ Â«Ð¿Ð»ÑÑок».
У наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ ÑоздÑÐ»Ñ Ð¼Ð¸ побаÑимо бÑлÑÑе пÑикладÑв Ñа ваÑÑанÑÑв ÑмпоÑÑÑ/екÑпоÑÑÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)