Рубрики
Без рубрики

Введение в модули ES

ES Modules – это стандарт ECMAScript для работы с модулями. В то время как Node.js использует стандарт CommonJS уже много лет, в браузере никогда не было модульной системы, так как каждое важное решение, такое как модульная система, должно быть сначала стандартизировано ECMAScript и затем реализованный

  • Введение в модули ES
  • Синтаксис модулей ES
  • Другие варианты импорта/экспорта
  • КОРС
  • Как насчет браузеров, которые не поддерживают модули?
  • Вывод

Введение в модули ES

ES Modules – это стандарт ECMAScript для работы с модулями.

В то время как Node.js В течение многих лет использовался стандарт CommonJS, в браузере никогда не было модульной системы, так как каждое важное решение, такое как модульная система, должно быть сначала стандартизировано ECMAScript, а затем реализовано браузером.

Этот процесс стандартизации завершился с ES6, и браузеры начали внедрять этот стандарт, стараясь, чтобы все было хорошо согласовано, работало одинаково, и теперь модули ES поддерживаются в Chrome, Safari, Edge и Firefox (начиная с версии 60).

Модули очень классные, потому что они позволяют вам инкапсулировать всевозможные функции и предоставлять эту функциональность другим файлам JavaScript в виде библиотек.

Синтаксис модулей ES

Синтаксис для импорта модуля следующий:

import package from 'module-name'

в то время как CommonJS использует

const package = require('module-name')

Модуль – это файл JavaScript, который экспортирует одно или несколько значений (объектов, функций или переменных), используя ключевое слово экспорт . Например, этот модуль экспортирует функцию, которая возвращает строку в верхнем регистре:

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

export default str => str.toUpperCase()

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

Теперь любой другой модуль JavaScript может импортировать функциональность, предлагаемую uppercase.js путем его импорта.

HTML-страница может добавить модуль с помощью тега

Примечание: импорт этого модуля ведет себя как загрузка скрипта отложить . Смотрите эффективно загружайте JavaScript с помощью defer и async

Важно отметить, что любой скрипт, загруженный с type="module" , загружается в строгом режиме .

В этом примере uppercase.js модуль определяет экспорт по умолчанию , поэтому, когда мы импортируем его, мы можем присвоить ему имя, которое мы предпочитаем:

import toUpperCase from './uppercase.js'

и мы можем это использовать:

toUpperCase('test') //'TEST'

Вы также можете использовать абсолютный путь для импорта модуля, чтобы ссылаться на модули, определенные в другом домене:

import toUpperCase from 'https://flavio-es-modules-example.glitch.me/uppercase.js'

Это также допустимый синтаксис импорта:

import { toUpperCase } from '/uppercase.js'
import { toUpperCase } from '../uppercase.js'

Это не:

import { toUpperCase } from 'uppercase.js'
import { toUpperCase } from 'utils/uppercase.js'

Он либо абсолютен, либо имеет ./ или / перед именем.

Другие варианты импорта/экспорта

Мы видели этот пример выше:

export default str => str.toUpperCase()

Это создает один экспорт по умолчанию. Однако в файле вы можете экспортировать более одной вещи, используя этот синтаксис:

const a = 1
const b = 2
const c = 3

export { a, b, c }

Другой модуль может импортировать все эти экспортные данные с помощью

import * from 'module'

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

import { a } from 'module'
import { a, b } from 'module'

Вы можете переименовать любой импорт, для удобства, используя как :

import { a, b as two } from 'module'

Вы можете импортировать экспорт по умолчанию и любой экспорт по умолчанию по имени, как в этом обычном импорте React:

import React, { Component } from 'react'

Вы можете увидеть пример модулей ES здесь: https://glitch.com/edit/#!/flavio-es-modules-example?path=index.html

КОРС

Модули извлекаются с помощью CORS . Это означает, что если вы ссылаетесь на сценарии из других доменов, у них должен быть допустимый заголовок CORS, который разрешает загрузку между сайтами (например, Контроль доступа-Разрешить-Происхождение: * )

Как насчет браузеров, которые не поддерживают модули?

Используйте комбинацию тип="модуль" и без модуля :


Вывод

Модули ES являются одной из самых больших функций, представленных в современных браузерах. Они являются частью ES6, но путь к их реализации был долгим.

Теперь мы можем их использовать! Но мы также должны помнить, что наличие большего количества модулей приведет к снижению производительности наших страниц, поскольку это еще один шаг, который браузер должен выполнить во время выполнения.

Webpack, вероятно, по-прежнему будет огромным игроком, даже если модули ES появятся в браузере, но наличие такой функции, непосредственно встроенной в язык, имеет огромное значение для унификации того, как модули работают на стороне клиента и на Node.js также хорошо.

Оригинал: “https://flaviocopes.com/es-modules/”