You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Export and import statements that we covered in previous chapters are called "static". The syntax is very simple and strict.
3
+
Інструкції експорту і імпорту, які ми розглядали в попередньому розділі, називаються "статичними". Синтаксис у них дуже простий і строгий.
4
4
5
-
First, we can't dynamically generate any parameters of`import`.
5
+
По-перше, ми не можемо динамічно задавати ніякі з параметрів`import`.
6
6
7
-
The module path must be a primitive string, can't be a function call. This won't work:
7
+
Шлях до модуля має бути строковим примітивом і не може бути викликом функції. Ось так працювати не буде:
8
8
9
9
```js
10
-
import ... from*!*getModuleName()*/!*; //Error, only from "string" is allowed
10
+
import ... from*!*getModuleName()*/!*; //Помилка, має бути рядок
11
11
```
12
12
13
-
Second, we can't import conditionally or at run-time:
13
+
По-друге, ми не можемо робити імпорт залежно від умов або в процесі виконання:
14
14
15
15
```js
16
16
if(...) {
17
-
import ...; //Error, not allowed!
17
+
import ...; //Помилка, заборонено
18
18
}
19
19
20
20
{
21
-
import ...; //Error, we can't put import in any block
21
+
import ...; //Помилка, ми не можемо ставити імпорт у блок
22
22
}
23
23
```
24
24
25
-
That's because `import`/`export`aim to provide a backbone for the code structure. That's a good thing, as code structure can be analyzed, modules can be gathered and bundled into one file by special tools, unused exports can be removed ("tree-shaken"). That's possible only because the structure of imports/exports is simple and fixed.
25
+
Усе це результат того, що мета директив `import`/`export`- задати кістяк структури коду. Завдяки ним вона може бути проаналізована, модулі можуть бути зібрані в один файл спеціальними інструментами, а невживані експорти видалені. Це можливо тільки завдяки тому, що все статично.
26
26
27
-
But how can we import a module dynamically, on-demand?
27
+
Але як ми можемо імпортувати модуль динамічно, за запитом?
28
28
29
-
## The import() expression
29
+
## Вираз import()
30
30
31
-
The`import(module)`expression loads the module and returns a promise that resolves into a module object that contains all its exports. It can be called from any place in the code.
31
+
Вираз`import(module)`завантажує модуль і повертає проміс, результатом якого стає об’єкт модуля, що містить усі його експорти.
32
32
33
-
We can use it dynamically in any place of the code, for instance:
33
+
Ми можемо використати його у будь-якому місці коду, наприклад, так:
34
34
35
35
```js
36
-
let modulePath =prompt("Which module to load?");
36
+
let modulePath =prompt("Який модуль завантажити?");
37
37
38
38
import(modulePath)
39
-
.then(obj=><module object>)
40
-
.catch(err=><loading error, e.g. if no such module>)
39
+
.then(obj=><об’єкт модуля>)
40
+
.catch(err=><помилка завантаження, наприклад якщо немає такого модуля>)
41
41
```
42
42
43
-
Or, we could use`let module = await import(modulePath)` if inside an async function.
43
+
Чи якщо усередині асинхронної функції, то можна використати`let module = await import(modulePath)`.
44
44
45
-
For instance, if we have the following module`say.js`:
45
+
Наприклад, якщо у нас є такий модуль`say.js`:
46
46
47
47
```js
48
48
// 📁 say.js
49
49
exportfunctionhi() {
50
-
alert(`Hello`);
50
+
alert(`Привіт`);
51
51
}
52
52
53
53
exportfunctionbye() {
54
-
alert(`Bye`);
54
+
alert(`Бувай`);
55
55
}
56
56
```
57
57
58
-
...Then dynamic import can be like this:
58
+
...То динамічний імпорт може виглядати так:
59
59
60
60
```js
61
61
let {hi, bye} =awaitimport('./say.js');
@@ -64,35 +64,35 @@ hi();
64
64
bye();
65
65
```
66
66
67
-
Or, if `say.js`has the default export:
67
+
А якщо в `say.js`вказаний типовий експорт:
68
68
69
69
```js
70
70
// 📁 say.js
71
71
exportdefaultfunction() {
72
-
alert("Module loaded (export default)!");
72
+
alert("Модуль завантажився (export default)!");
73
73
}
74
74
```
75
75
76
-
...Then, in order to access it, we can use`default`property of the module object:
76
+
...То для доступу до нього нам слід узяти властивість`default`об’єкту модуля:
77
77
78
78
```js
79
79
let obj =awaitimport('./say.js');
80
80
let say =obj.default;
81
-
//or, in one line: let {default: say} = await import('./say.js');
81
+
//або одним рядком: let {default: say} = await import('./say.js');
82
82
83
83
say();
84
84
```
85
85
86
-
Here's the full example:
86
+
Ось повний приклад:
87
87
88
88
[codetabs src="say" current="index.html"]
89
89
90
90
```smart
91
-
Dynamic imports work in regular scripts, they don't require `script type="module"`.
91
+
Динамічний імпорт працює в звичайних скриптах, він не вимагає вказівки `script type="module"`.
92
92
```
93
93
94
94
```smart
95
-
Although `import()` looks like a function call, it's a special syntax that just happens to use parentheses (similar to `super()`).
95
+
Хоча `import()` і виглядає схожим на виклик функції, насправді це спеціальний синтаксис, так само, як, наприклад, `super()`.
96
96
97
-
So we can't copy `import` to a variable or use `call/apply` with it. It's not a function.
98
-
```
97
+
Тому ми не можемо скопіювати `import` в іншу змінну або викликати за допомогою `.call/apply`. Це не функція.
0 commit comments