Когда файл Elm скомпилирован, время выполнения Elm извлекается в тот же файл. Назовем этот файл app.js
. Когда даже один байт изменяется в app.js
, хеш изменяется, в результате клиент снова загружает файл, даже если изменился только один байт. Есть ли способ извлечь время работы Elm в отдельный блок vendor
(или commons
)?Извлечь время работы вальца в отдельный кусок
ответ
В Elm 0.18 и предыдущих версиях ядро Elm входит в комплект поставки.
Это может быть неэффективным, например, если вы загружаете различные компоненты Elm на несколько страниц. Для каждой страницы потребуется собственный пакет, но ядро Elm будет включено в каждый комплект.
Обход (! Непроверенные)
- компиляции кода Elm в пучок,
output.js
Открыть
output.js
и начиная с начала файла до последнегоvar
декларации, которая выглядит примерно так:var _elm_lang$html$Html_Events$Options = F2(
Ниже этой последней декларации переменной, которая начинается с
_elm_lang
вы должны увидеть код модуля, вы написал. Вот где начинается разделение.- Скопируйте и вставьте этот весь кусок в отдельный файл и назовите его
elm-core.js
Тада! Теперь вы должны быть в состоянии загрузить их, как это в ваших HTML-файлов:
<html> <script src="elm-core.js"></script> <script src="output.js"></script> </html>
Осторожно! Весь выходной пакет завернут в IIFE (сразу вызывается выражение функции), поэтому вам придется обернуть все куски в этом, чтобы убедиться, что он работает. Если вы этого не сделаете, вы получите ошибки, такие как «F2 не определено» и «A2 не определено».
Elm 0.19+
В будущих версиях Elm должно быть лучше решение этой проблемы.
Я не уверен, что есть способ сделать это. Есть способ скомпилировать и добавить дополнительные модули в app.js. Webpack на самом деле чувствует себя медленнее, чем Elm, поэтому вы теряете производительность, пытаясь сделать chunking с помощью webpack. Это хороший вопрос, хотя было бы неплохо отправить отдельный фрагмент через 'elm make' –
@ RudolfOlah Перемещение времени выполнения Elm в отдельный кусок - это нечто большее для сборки сборки. Он просто чувствует себя правильно, чтобы установить время выполнения в коде поставщика, а также по причинам кэширования, которые я изложил. – DevNebulae
Да, я согласен с этим, однако с Элмом кажется, что производительность лучше. Интересно, как компании, использующие Elm в производстве, развертывают его, интересно, используют ли они webpack или что-то еще. –