in ES6

Святая корова — мой очень длинный файл JavaScript. Это становится довольно беспокойным в середине, где я определяю классы. И где я снова поместил эту функцию? Там должен быть лучший способ!

МОДУЛИпозволяют разделить наш код на составные части и организовать его соответствующим образом.

Другие синтаксисы — до их включения в стандартный JavaScript, начиная с ES6 (ES2015), существовало несколько конкурирующих стандартов для определения модулей.

Node.js/стиль CommonJS

  • такие утверждения, как const module = require('./mod.js'); и
  • module.exports = class Doohickey {}

Стиль AMD/RequireJS

  • утверждения типа define(idString, dependenciesArray, factoryFunction);

Импорт Экспорт

Внутри модуля, из которого вы хотите экспортировать функции:

export const a;
export function b() {};
export class C {};
// -- or --
export { a, b, C };

альтернативно для одного экспорта:

export default d;

Внутри скрипта вы хотите добавить функции модуля:

import { a, b, C } from './modules/abc.js';

и снова поочередно:

import d from './modules/d.js';
// -- or --
import whateverNameYouWant from './modules/d.js';

Вы также можете переименовывать вещи, как вам нравится:

export {
  a as apple,
  b as banana,
  C as Coconut
}
// in the importing script
import { 
  apple, 
  banana, 
  Coconut 
} from './modules/abc.js';

Вы также можете сделать это в обратном порядке.

export {
  a,
  b,
  C
}
// in the importing script
import { 
  a as apple, 
  b as banana, 
  C as Coconut
} from './modules/abc.js';

Эти функции теперь готовы к использованию, как если бы они были определены в том же скрипте.

Чтобы они работали с HTML, оба сценария должны быть явно определены как модули.

<script type="module" src="abc.js"></script>
<script type="module" src="main.js"></script>

Вам также необходимо выполнять все ваши тесты через сервер, так как открытие HTML-файла напрямую вызовет ошибку CORS.

Объекты модуля

Мобъекты.

import * as CoolModule from './modules/coolModule.js';

Это меня зацепило, так как часто вы видите звездочку * как символ «всего» или «всего». Затем вы можете использовать функции в модуле как методы объекта.

CoolModule.coolFunction();

D Y N A M I C L O A D I N G

Если вы используете этот синтаксис, функция импорта вернет обещание, которое выполняется с объектом модуля.

import('./modules/coolModule.js')
  .then(module => {
    // cool async stuff
});

Модули!