|
1 |
| -# Dynamic imports |
| 1 | +# Dynamické importy |
2 | 2 |
|
3 |
| -Export and import statements that we covered in previous chapters are called "static". The syntax is very simple and strict. |
| 3 | +Příkazy exportu a importu, které jsme uvedli v předchozích kapitolách, se nazývají „statické“. Jejich syntaxe je velmi jednoduchá a striktní. |
4 | 4 |
|
5 |
| -First, we can't dynamically generate any parameters of `import`. |
| 5 | +Za prvé, žádné parametry příkazu `import` nemůžeme dynamicky generovat. |
6 | 6 |
|
7 |
| -The module path must be a primitive string, can't be a function call. This won't work: |
| 7 | +Cesta k modulu musí být primitivní řetězec, ne volání funkce. Tohle nebude fungovat: |
8 | 8 |
|
9 | 9 | ```js
|
10 |
| -import ... from *!*getModuleName()*/!*; // Error, only from "string" is allowed |
| 10 | +import ... from *!*vraťNázevModulu()*/!*; // Chyba, povoleno je jen from "řetězec" |
11 | 11 | ```
|
12 | 12 |
|
13 |
| -Second, we can't import conditionally or at run-time: |
| 13 | +Za druhé, nemůžeme importovat podmíněně nebo za běhu skriptu: |
14 | 14 |
|
15 | 15 | ```js
|
16 | 16 | if(...) {
|
17 |
| - import ...; // Error, not allowed! |
| 17 | + import ...; // Chyba, tohle není dovoleno! |
18 | 18 | }
|
19 | 19 |
|
20 | 20 | {
|
21 |
| - import ...; // Error, we can't put import in any block |
| 21 | + import ...; // Chyba, nemůžeme umístit import do bloku |
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 | +Je to proto, že záměrem příkazů `import`/`export` je poskytnout páteř struktury kódu. To je dobrá věc, protože strukturu kódu můžeme analyzovat, moduly můžeme speciálními nástroji shromažďovat a spojovat do jednoho souboru, nepoužité exporty můžeme odstraňovat („třesení stromem“). To je možné jen proto, že struktura importů a exportů je jednoduchá a pevná. |
26 | 26 |
|
27 |
| -But how can we import a module dynamically, on-demand? |
| 27 | +Jak ale můžeme importovat modul dynamicky, na požádání? |
28 | 28 |
|
29 |
| -## The import() expression |
| 29 | +## Výraz 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 | +Výraz `import(modul)` načte modul a vrátí příslib, který se splní do objektu modulu obsahujícího všechny jeho exporty. Může být volán z kteréhokoli místa v kódu. |
32 | 32 |
|
33 |
| -We can use it dynamically in any place of the code, for instance: |
| 33 | +Můžeme jej používat dynamicky na kterémkoli místě kódu, například: |
34 | 34 |
|
35 | 35 | ```js
|
36 |
| -let modulePath = prompt("Which module to load?"); |
| 36 | +let cestaModulu = prompt("Který modul načíst?"); |
37 | 37 |
|
38 |
| -import(modulePath) |
39 |
| - .then(obj => <module object>) |
40 |
| - .catch(err => <loading error, e.g. if no such module>) |
| 38 | +import(cestaModulu) |
| 39 | + .then(obj => <objekt modulu>) |
| 40 | + .catch(chyba => <chyba při načítání, např. když takový modul neexistuje>) |
41 | 41 | ```
|
42 | 42 |
|
43 |
| -Or, we could use `let module = await import(modulePath)` if inside an async function. |
| 43 | +Nebo můžeme použít `let modul = await import(cestaModulu)`, jsme-li uvnitř asynchronní funkce. |
44 | 44 |
|
45 |
| -For instance, if we have the following module `say.js`: |
| 45 | +Například jestliže máme následující modul `řekni.js`: |
46 | 46 |
|
47 | 47 | ```js
|
48 |
| -// 📁 say.js |
49 |
| -export function hi() { |
50 |
| - alert(`Hello`); |
| 48 | +// 📁 řekni.js |
| 49 | +export function ahoj() { |
| 50 | + alert(`Ahoj`); |
51 | 51 | }
|
52 | 52 |
|
53 |
| -export function bye() { |
54 |
| - alert(`Bye`); |
| 53 | +export function nashle() { |
| 54 | + alert(`Nashle`); |
55 | 55 | }
|
56 | 56 | ```
|
57 | 57 |
|
58 |
| -...Then dynamic import can be like this: |
| 58 | +...Pak dynamický import může vypadat takto: |
59 | 59 |
|
60 | 60 | ```js
|
61 |
| -let {hi, bye} = await import('./say.js'); |
| 61 | +let {ahoj, nashle} = await import('./řekni.js'); |
62 | 62 |
|
63 |
| -hi(); |
64 |
| -bye(); |
| 63 | +ahoj(); |
| 64 | +nashle(); |
65 | 65 | ```
|
66 | 66 |
|
67 |
| -Or, if `say.js` has the default export: |
| 67 | +Nebo jestliže `řekni.js` obsahuje výchozí export: |
68 | 68 |
|
69 | 69 | ```js
|
70 |
| -// 📁 say.js |
| 70 | +// 📁 řekni.js |
71 | 71 | export default function() {
|
72 |
| - alert("Module loaded (export default)!"); |
| 72 | + alert("Modul načten (výchozí export)!"); |
73 | 73 | }
|
74 | 74 | ```
|
75 | 75 |
|
76 |
| -...Then, in order to access it, we can use `default` property of the module object: |
| 76 | +...Pak můžeme pro přístup k němu použít vlastnost `default` objektu modulu: |
77 | 77 |
|
78 | 78 | ```js
|
79 |
| -let obj = await import('./say.js'); |
80 |
| -let say = obj.default; |
81 |
| -// or, in one line: let {default: say} = await import('./say.js'); |
| 79 | +let obj = await import('./řekni.js'); |
| 80 | +let řekni = obj.default; |
| 81 | +// nebo na jednom řádku: let {default: řekni} = await import('./řekni.js'); |
82 | 82 |
|
83 |
| -say(); |
| 83 | +řekni(); |
84 | 84 | ```
|
85 | 85 |
|
86 |
| -Here's the full example: |
| 86 | +Zde je celý příklad: |
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 | +Dynamické importy fungují i v běžných skriptech, nevyžadují `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 | +Ačkoli `import()` vypadá jako volání funkce, je to speciální syntaxe, která prostě jen používá závorky (podobně jako `super()`). |
96 | 96 |
|
97 |
| -So we can't copy `import` to a variable or use `call/apply` with it. It's not a function. |
| 97 | +Nemůžeme tedy kopírovat `import` do proměnné nebo s ním používat `call/apply`. Není to funkce. |
98 | 98 | ```
|
0 commit comments