Как вы создаете, связываете и минимизируете модули ES6?

В связи с тем, что для тестирования доступны ES6-модули (JavaScript-модули):

Интересно, как мне минифицировать и подготовить релиз-файл проекта? Раньше я объединял все JavaScript-файлы в один мини-файл, за исключением ситуаций, когда мне нужно динамически загружать JS-файл через XHR или Fetch API.

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

Итак, есть ли способы собрать мои ES6-модули в один файл и как мне подготовить современный JavaScript-проект в 2017 году, где будут доступны JavaScript-модули?


person Community    schedule 30.07.2017    source источник
comment
Используйте упаковщик, например webpack   -  person Sven van de Scheur    schedule 30.07.2017
comment
Ранее я объединил все JavaScript-файлы в один мини-файл: почему вы не сможете сделать это с модулями ES2015?   -  person PeterMader    schedule 30.07.2017
comment
@SvenvandeScheur Работает ли веб-пакет изначально с модулями ES6? Или он просто переводит JS-код в ES5-скрипты с исходными картами? Если последний вариант правильный, то это довольно старое решение для 2017 года. Если веб-браузер предоставил новый способ разделения проекта с помощью ES6-модулей, почему бы не найти способ, как использовать современные функции более приятным образом? PS: Кроме того, я использовал веб-пакет 1 год назад, и, если честно... Это довольно уродливый проект (как по мне).   -  person    schedule 30.07.2017
comment
@PeterMader Может быть, потому что у них разные области действия с import/export вещами. Как бы вы загрузили модуль A из модуля B, если бы это был один файл?   -  person    schedule 30.07.2017
comment
Webpack позволяет вам объединять модули ES6 с минимальной конфигурацией: например. ccoenraets.github.io/es6-tutorial/setup-webpack   -  person Sven van de Scheur    schedule 30.07.2017
comment
Вы можете создавать области в ES5, используя замыкания. Вот как работают сборщики модулей.   -  person PeterMader    schedule 30.07.2017
comment
@PeterMader Да, могу. Но есть очень большая разница. Встроенная поддержка ключевых слов импорта/экспорта, и я думаю, что веб-браузеры ДЕЛАЮТ какую-то специфическую работу с загрузкой таких модулей нативным способом.   -  person    schedule 30.07.2017
comment
Пожалуйста, взгляните на ссылки, которые были размещены здесь. Вы можете поверить мне, что это возможно.   -  person PeterMader    schedule 30.07.2017
comment
@PeterMader Я видел, это НЕ родной способ. Я повторяю. Интересно, именно нативный способ без переводов в es5-код, исходные карты и т. д. Вопросы НЕ БЫЛИ об эмуляции или способах поддержки ES6-модулей через исходные карты или другие конкретные вещи. Вопрос был о возможности минификации НАТИВНЫХ модулей БЕЗ переводов, полифиллов и т.п...   -  person    schedule 30.07.2017


Ответы (2)


Интересно, как мне минифицировать и подготовить релиз-файл проекта?

Что является целью этого действия? Хорошо, мини-файлы потребляют меньше сетевого трафика и будут загружаться быстрее, но большинство библиотек NPM уже предоставляют мини-файлы dist. И главный вопрос по поводу объединения в один большой файл.

Зачем вебпак это делает? Конечно, из-за отсутствия поддержки ES-модулей в браузере нативным, Почему веб-пакет разрешает import инструкции и округляет зависимости синхронно*, а затем подменяет его на IIFE для области видимости. И выполнять трансляцию и полифиллинг Babel, да.

Но потом запускается нативная поддержка ES-модулей, она становится никому не нужна. Одной из основных целей при развертывании вашего веб-приложения в рабочей среде является минимизация объема трафика для вашего сервера с помощью CDN. Теперь вы можете сделать это нативным способом, так что просто импортируйте ES-модули из unpkg.org и будьте счастливы

* Если не использовать HMR, конечно, но это не подходит для производственного режима.

Живые примеры здесь: https://jakearchibald.com/2017/es-modules-in-browsers/

person Vladislav Ihost    schedule 30.07.2017
comment
But then native support of ES-modules is started, it's become un-useful., меня интересует именно эта строчка, потому что это будущее будет совсем скоро, как я вижу... - person ; 30.07.2017
comment
@Neverlands Добавлена ​​ссылка с живыми примерами по вашему вопросу. (Не забудьте проголосовать, если полезно) - person Vladislav Ihost; 30.07.2017
comment
Рад голосовать, но не могу из-за плохой репутации. Когда будет необходимое количество, я проголосую за. - person ; 30.07.2017
comment
Глядя на это в 2020 году, есть ли способ минимизировать эти файлы? Я пытаюсь сделать это без пакетов npm... - person jssayin; 26.08.2020

В этом блоге объясняется, как можно использовать ES6 module syntax и при этом связать свой код во что-то, понятное браузеру.

В блоге объясняется, что использование SystemJs в качестве ES6 module polyfill и Babel вместе с Gulp позволит вам кодировать свои модули в ES6, но при этом вы сможете использовать его сегодня.

https://www.barbarianmeetscoding.com/blog/2016/02/21/start-using-es6-es2015-in-your-project-with-babel-and-gulp/

Использование этого руководства поможет вам написать свой код на ES6, сохраняя при этом обычный рабочий процесс для создания, минимизации и объединения вашего кода.

Имейте в виду, что существует множество инструментов, которые помогут вам добиться этого, но я использовал этот метод много раз и могу поручиться за его достоверность.

person jeanfrg    schedule 30.07.2017
comment
Я знаю об этом. Но, насколько я понимаю, это все еще ссылки на перевод исходного кода в ES5-скрипты, и модули NATIVE не будут работать таким образом. Он будет просто использовать перевод/исходные карты Babel. Это НЕ то, чего я хочу. Меня интересует НАТИВНАЯ работа модулей и возможность минимизации ES6-модулей без использования babel, webpack или других трансляторов... - person ; 30.07.2017
comment
@Neverlands Как вы сами заявили, модули ES6 еще не поддерживаются, поэтому требуется какая-то транспиляция в код ES5. - person jeanfrg; 30.07.2017
comment
Но, как видите, очень скоро он будет поддерживаться. И что? Меня интересует именно новый способ работы. Я не заинтересован в использовании способов минимизации/полифиллов через babel, webpack и другие относительные вещи. Веб-браузеры дают новый способ работы и меня интересует именно он, а не старые способы подготовки, которые я уже использую. - person ; 30.07.2017
comment
Я считаю, что произвольный набор модулей ES2015 не может быть объединен в один модуль ES2015. Это просто невозможно из-за семантики модулей ES2015, то есть области видимости и разрешения импортированных идентификаторов. Вы можете достичь этого только в том случае, если вы работаете с корневым или входным модулем; в результате получается модуль, который включает зависимости и предоставляет только экспортированные идентификаторы корневого или входного модуля. Есть ли упаковщик, который делает именно это? Кроме того, вы также можете объединить другие части дерева зависимостей в один модуль ES2015. - person Carl in 't Veld; 03.03.2020