Skip to content

Commit fd3ef1a

Browse files
committed
iliakan review
1 parent 7b8718b commit fd3ef1a

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

1-js/13-modules/02-import-export/article.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Мы можем пометить любое объявление как экспортируемое, разместив `export` перед ним, будь то переменная, функция или класс.
1010

11-
Например, все следующие экспорты валидны:
11+
Например, все следующие экспорты допустимы:
1212

1313
```js
1414
// экспорт массива
@@ -61,7 +61,7 @@ export {sayHi, sayBye}; // список экспортируемых перем
6161
*/!*
6262
```
6363

64-
...Или, технически, мы так же можем расположить `export` выше функций.
64+
...Или, технически, мы также можем расположить `export` выше функций.
6565

6666
## Импорт *
6767

@@ -103,15 +103,15 @@ say.sayBye('John');
103103
export function becomeSilent() { ... }
104104
```
105105

106-
Теперь, если нам на самом деле в проекте нужна только одна из них:
106+
Теперь, если из этой библиотеки в проекте мы используем только одну функцию:
107107
```js
108108
// 📁 main.js
109109
import {sayHi} from './lib.js';
110110
```
111111
...Тогда оптимизатор автоматически определит это и полностью удалит другие функции из собранного кода, тем самым делая код меньше. Это называется "tree-shaking".
112112

113113
2. Явное перечисляя то, что хотим импортировать, мы получаем более короткие имена: `sayHi()` вместо `lib.sayHi()`.
114-
3. При явных импортах упрощается беглый обзор кода: что и где используется. Это упрощает поддержку и рефакторинг кода.
114+
3. Явный импорт делает код более понятным, позволяет увидеть, что именно и где используется. Это упрощает поддержку и рефакторинг кода.
115115

116116
## Импорт "как"
117117

@@ -155,15 +155,15 @@ say.bye('John'); // Bye, John!
155155

156156
До сих поры мы видели, как экспортировать/импортировать вещи, опционально под другими именами.
157157

158-
На практике модули могут содержать:
158+
На практике модули обычно содержат одно из:
159159
- Либо библиотеку, набор функций, как `lib.js`.
160160
- Либо сущность, например `class User`, определенную в `user.js`. Во всём модуле есть только этот класс.
161161

162162
По большей части, предпочтителен второй подход, чтобы каждая "вещь" находилась в своём собственном модуле.
163163

164-
Естественно, это требует большого количества файлов, так как всё находится в своём модуле, но это не проблема. На самом деле, навигация по коду становится проще, если у файлов хорошие названия и всё структурировано по папкам.
164+
Естественно, потребуется много файлов, если для всего делать отдельный модуль, но это не проблема. Так даже удобнее: навигация по проекту становится проще, особенно если у файлов хорошие имена, и они структурированы по папкам.
165165

166-
Модули предоставляют специальный синтаксис `export default`, чтобы вариант "одна вещь в одном модуле" выглядел лучше.
166+
Модули предоставляют специальный синтаксис `export default` для второго подхода.
167167

168168
Для этого требуются следующие `export` и `import` инструкции:
169169

@@ -190,7 +190,7 @@ import *!*User*/!* from './user.js'; // не {User}, просто User
190190
new User('John');
191191
```
192192

193-
Импорты без фигурных скобок выглядят лучше. Обычная ошибка для начинающих использовать модули: забыть про фигурные скобки совсем. Так что, помните, фигурные скобки необходимы только в случае именованного импорта, для импорта по-умолчанию они не нужны.
193+
Импорты без фигурных скобок выглядят красивее. Обычная ошибка начинающих: забыть про фигурные скобки. Фигурные скобки необходимы в случае именованного импорта, для импорта по умолчанию они не нужны.
194194

195195
| Именованный экспорт | Экспорт по умолчанию |
196196
|--------------|----------------|
@@ -199,9 +199,9 @@ new User('John');
199199

200200
Естественно, может быть только один экспорт "по умолчанию" на файл.
201201

202-
У нас могут быть как экспорт по умолчанию, так и именованные экспорты в одном модуле, но на практике обычно их не смешивают. В модуле есть, либо именованные экспорты, либо экспорт по умолчанию.
202+
У нас могут быть как экспорт по умолчанию, так и именованные экспорты в одном модуле, но на практике обычно их не смешивают. То есть, в модуле находятся либо именованные экспорты, либо один экспорт по умолчанию.
203203

204-
**Другой момент, что у именованного импорта (естественно) должно быть имя, тогда как `export default` может быть анонимным.**
204+
**Заметим, что у именованного импорта (естественно) должно быть имя, тогда как `export default` может быть анонимным.**
205205

206206
Например, всё это -- полностью корректные экспорты по умолчанию:
207207

@@ -229,7 +229,7 @@ export class { // Ошибка! (необходимо имя, если это н
229229

230230
### Псевдоним "default"
231231

232-
Слово "default" -- это своего рода "псевдоним" для экспорта по умолчанию, для сценариев, когда нам нужно каким-либо образом сослаться на него.
232+
Слово "default" -- это своего рода "псевдоним" для экспорта по умолчанию, для экспортирования отдельно от объявления и других ситуаций, когда нам нужно сослаться на него.
233233

234234
Например, если мы уже объявили функцию, то мы можем сделать `export default` вот таким образом:
235235

@@ -278,17 +278,17 @@ new User('John');
278278

279279
### Должен ли я использовать экспорт по умолчанию?
280280

281-
Нужно быть осторожным с использованием экспорта по умолчанию, потому что он поддерживается несколько иначе.
281+
Нужно быть осторожным с использованием экспорта по умолчанию, потому что он сложнее в поддержке.
282282

283-
Именованные экспорты очевидны. У них есть явное имя для импорта, мы получаем от них эту информацию, и это хорошо.
283+
Именованные экспорты "включают в себя" своё имя. Эта информация является частью модуля, говорит нам, что именно экспортируется.
284284

285285
Также именованные экспорты вынуждают нас использовать правильное имя при импорте:
286286

287287
```js
288288
import {User} from './user.js';
289289
```
290290

291-
Для экспорта по умолчанию нам нужно создать своё собственное имя:
291+
Для экспорта по умолчанию мы можем выбрать любое имя при импорте:
292292

293293
```js
294294
import MyUser from './user.js'; // можно импортировать с любым именем, и это будет работать
@@ -307,7 +307,7 @@ import func from '/path/to/func.js';
307307

308308
Другим решением может быть -- использование именованных экспортов везде. Даже, если экспортируется только одна вещь, она всё равно экспортируется с именем, без использования `default`.
309309

310-
Это так же немного упрощает реэкспорт (смотрите ниже).
310+
Это также немного упрощает реэкспорт (смотрите ниже).
311311

312312
## Реэкспорт
313313

@@ -336,7 +336,7 @@ auth/
336336
...
337337
```
338338
339-
Мы бы хотели распространить функциональность пакета через единую точку входа, такую, как "главный файл" `auth/index.js`, чтобы можно было использовать таким образом:
339+
Мы бы хотели сделать функционал нашего пакета доступным через единую точку входа: "главный файл" `auth/index.js`. Чтобы можно было использовать его следующим образом:
340340
341341
```js
342342
import {login, logout} from 'auth/index.js'
@@ -359,7 +359,7 @@ export {Github};
359359
...
360360
```
361361

362-
"Рекэкспорт" -- это просто более короткая запись для этого:
362+
"Реэкспорт" -- это просто более короткая запись для этого:
363363

364364
```js
365365
// 📁 auth/index.js
@@ -376,15 +376,15 @@ export {default as Github} from './providers/github.js';
376376
````warn header="Механизм рэкспортирования значения по умолчанию -- запутанный"
377377
Обратите внимание: `export User from './user.js'` не будет работать. Тут синтаксическая ошибка. Чтобы реэкспортировать экспорт по умолчанию, мы должны явно написать `{default as ...}`, как в примере выше.
378378
379-
Так же есть ещё одна странность: `export * from './user.js'` реэкспортирует только именованные экспорты, исключая экспорты по умолчанию. Ещё раз, мы должны обозначить это явно.
379+
Так же есть ещё одна странность: `export * from './user.js'` реэкспортирует только именованные экспорты, исключая экспорты по умолчанию. Ещё раз заметим: мы должны обозначить экспорт по умолчанию явно.
380380
381381
Например, чтобы реэкспортировать всё, нам нужны две инструкции:
382382
```js
383383
export * from './module.js'; // для реэкспорта именованных экспортов
384384
export {default} from './module.js'; // для реэкспорта по умолчанию
385385
```
386386
387-
Экспорт по-умолчанию должен быть обозначен явно только при реэкспорте: `import * as obj` работает нормально. Экспорт по-умолчанию будет находиться в `obj.default`. Так что, здесь есть некоторая асимметрия между конструкциями импорта и экспорта.
387+
Экспорт по умолчанию должен быть обозначен явно только при реэкспорте: `import * as obj` работает нормально (при этом экспорт по умолчанию будет находиться в `obj.default`). Так что здесь есть некоторая асимметрия между конструкциями импорта и экспорта.
388388
````
389389

390390
## Итого
@@ -404,15 +404,15 @@ export {default} from './module.js'; // для реэкспорта по умо
404404

405405
- Именованные экспорты из модуля:
406406
- `import {x [as y], ...} from "mod"`
407-
- Экспорт по-умолчанию:
407+
- Экспорт по умолчанию:
408408
- `import x from "mod"`
409409
- `import {default as x} from "mod"`
410410
- Всё сразу:
411411
- `import * as obj from "mod"`
412-
- Только получить/оценить модуль, не импортировать:
412+
- Только подключить модуль (он запустится), но не присваивать его переменной:
413413
- `import "mod"`
414414

415-
Мы можем поставить импорт/экспорт инструкции после или перед другим кодом, это не имеет значения.
415+
Мы можем поставить import/export в начале или в конце скрипта, это не имеет значения.
416416

417417
Так что, технически, это нормально:
418418
```js
@@ -423,9 +423,9 @@ import {sayHi} from './say.js'; // импорт в конце файла
423423

424424
На практике импорты, чаще всего, располагаются в начале файла. Но это только для большего удобства.
425425

426-
**Обратите внимание, что инструкции импорт/экспорт не работают внутри `{...}`.**
426+
**Обратите внимание, что инструкции import/export не работают внутри `{...}`.**
427427

428-
Условный импорт, как этот, работать не будет:
428+
Условный импорт, такой как ниже, работать не будет:
429429
```js
430430
if (something) {
431431
import {sayHi} from "./say.js"; // Ошибка: импорт должен быть на верхнем уровне

0 commit comments

Comments
 (0)