Этот инструмент находится на ранней стадии разработки
Следует ожидать серьезных изменений и ошибок.
Чтение, анализ и встраивание переменных среды и содержимого файлов в ваш код Elm.
Данные внедряются с помощью Embedders . Программы для внедрения находятся внутри специальной папки elm-embed-scripts
и представляют собой любую декларацию Elm с подписью Embed.Task
. Работа со средствами внедрения аналогична работе с декодерами JSON: например, вы можете прочитать файл с помощью Embed.File.read
и проанализировать его с помощью Embed.andThen
. Если синтаксический анализ завершится успешно, вы можете внедрить значение с помощью Embed.succeed
, а в случае неудачи вы можете сообщить, почему, с помощью Embed.fail
. Если все программы внедрения успешны, результирующие значения будут сгенерированы и помещены в виде кода Elm внутри src/generated
, где они могут быть использованы остальной частью кодовой базы.
При разработке вы можете захотеть использовать локальный сервер вместо производственного. Для этого можно внедрить переменную среды, содержащую URL-адрес используемого сервера.
elm-embed-scripts/Server.elm
:
import Embed
import Embed.Environment
server : Embed . Task String
server =
Embed . Environment . string " server_url "
Запуск elm-embed run
, когда для переменной среды server_url
установлено значение localhost:8080
внутри src/Generated/Server.elm
вы получите следующее:
server : String
server =
" localhost:8080 "
Возможно, вы захотите создать страницу из документа уценки вместо кода Elm. Обычным подходом было бы включить документ в виде строки, а затем проанализировать и отобразить его во время выполнения. Это имеет несколько недостатков. Разбор требует времени. Вставлять уценку в строку Elm вручную также раздражает и может привести к ошибкам. Наконец, вам придется иметь дело со случаем, когда синтаксический анализ не удался, и предоставить пользователю какую-то страницу с ошибкой. С помощью elm-embed
вы можете прочитать файл .md
, проанализировать его во время сборки, и если анализ завершится неудачно, вы получите ошибку как разработчик во время сборки, а не как пользователь во время выполнения.
В этом примере анализируется документ уценки с помощью dillonkearns/elm-markdown.
-- elm-embed-scripts/Markdown.elm
import Embed
import Embed.File
import Markdown.Block exposing ( Block (..) , HeadingLevel (..) , Inline (..) )
import Markdown.Parser
document : Embed . Task ( List Block )
document =
Embed . andThen
( markdown ->
case Markdown . Parser . parse markdown of
Ok blocks ->
Embed . succeed blocks
Err _ ->
Embed . fail " Parse error "
)
( Embed . File . read " markdown.md " )
Примечание. Если вас это интересует, возможно, стоит также заглянуть на elm-pages. Он может анализировать уценку во время сборки и делать кучу других интересных вещей, включая батарейки. elm-embed
— это инструмент для одной конкретной задачи, тогда как elm-pages
— это скорее фреймворк.
elm-embed
помещает некоторые собственные модули в elm-embed-scripts
которые будут использоваться вашими специалистами по внедрению. Полный API для этих модулей можно увидеть здесь.
Запуск приведенного ниже кода позволит загрузить готовый двоичный файл для 64-битного Linux, сделать его исполняемым и поместить в /usr/local/bin
. Это работает для большинства дистрибутивов Linux.
curl -L -o elm-embed.gz https://github.com/emmabastas/elm-embed/releases/download/0.1.0/elm-embed-0.1.0-linux-x64.gz
gunzip elm-embed.gz
chmod +x elm-embed
sudo mv elm-embed /usr/local/bin/
Теперь elm-embed
можно вызывать из командной строки.
Удалите с помощью sudo rm /usr/local/bin/elm-embed
В настоящее время нет готовых двоичных файлов для Windows или Mac, единственный вариант — сборка из исходного кода, это тот же процесс, что и при сборке компилятора Elm.
Инициализируйте с помощью elm-embed init
.
Запустите программы для внедрения с помощью elm-embed run
.
Получите помощь с elm-embed --help
.
Лучший способ внести свой вклад прямо сейчас — предоставить мне варианты использования, оставив комментарий здесь. Будьте как можно подробнее. Что и как может сделать для вас elm-embed
? Что нужно будет изменить/добавить?
Эти варианты использования действительно помогут мне принимать более обоснованные проектные решения в будущем, но я не могу обещать, что ваш конкретный вариант использования будет реализован. Я хочу, чтобы elm-embed
был как можно лучше в рамках своих возможностей, а это означает отказ от вещей, выходящих за рамки, а также время на все обдумывание, вместо того, чтобы торопиться с новыми функциями.