Esta ferramenta está em desenvolvimento inicial
Mudanças significativas e bugs são esperados
Leia, analise e incorpore variáveis de ambiente e conteúdo de arquivo em seu código Elm.
Os dados são incorporados com Embedders . Os incorporadores ficam dentro de uma pasta especial, elm-embed-scripts
, e são qualquer declaração Elm com a assinatura Embed.Task
. Trabalhar com incorporadores é semelhante a trabalhar com decodificadores JSON. Você pode, por exemplo, ler um arquivo com Embed.File.read
e analisá-lo com Embed.andThen
. Se a análise for bem-sucedida, você poderá incorporar o valor com Embed.succeed
e, se falhar, poderá relatar o motivo com Embed.fail
. Se todos os incorporadores forem bem-sucedidos, os valores resultantes serão gerados e colocados como código Elm dentro de src/generated
onde poderão ser consumidos pelo restante da base de código.
Ao desenvolver, você pode querer usar um servidor local em vez de um servidor de produção. Para conseguir isso, uma variável de ambiente pode ser incorporada que contém a URL do servidor a ser usado.
elm-embed-scripts/Server.elm
:
import Embed
import Embed.Environment
server : Embed . Task String
server =
Embed . Environment . string " server_url "
Executar elm-embed run
quando a variável de ambiente server_url
estiver definida como localhost:8080
fornecerá isso dentro de src/Generated/Server.elm
:
server : String
server =
" localhost:8080 "
Você pode querer criar uma página a partir de um documento markdown em vez do código Elm. A abordagem normal seria incluir o documento como uma string e depois analisá-lo e renderizá-lo em tempo de execução. Isto tem várias desvantagens. A análise leva tempo. Também é irritante e propenso a erros incorporar descontos em uma string Elm manualmente. Por último, você precisa lidar com o caso em que a análise falha e fornecer ao usuário algum tipo de página de erro. Com elm-embed
você pode ler um arquivo .md
, analisá-lo em tempo de construção e, se a análise falhar, você receberá o erro como desenvolvedor em tempo de construção, em vez de como usuário em tempo de execução.
Este exemplo analisa um documento markdown com 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 " )
Nota: Se você estiver interessado nisso, talvez valha a pena conferir o elm-pages também. Ele pode fazer análise de descontos no momento da construção e um monte de outras coisas legais, incluindo baterias. elm-embed
é uma ferramenta para uma coisa específica, enquanto elm-pages
é mais um tipo de negócio estrutural.
elm-embed
coloca alguns módulos próprios em elm-embed-scripts
para serem usados por seus incorporadores. Você pode ver a API completa desses módulos aqui.
A execução do código abaixo irá baixar um binário pré-puilt para Linux de 64 bits, torná-lo executável e colocá-lo em /usr/local/bin
. Isso funciona para a maioria das distribuições 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/
Agora elm-embed
deve poder ser chamado na linha de comando.
Desinstale com sudo rm /usr/local/bin/elm-embed
Atualmente não há binários pré-construídos para Windows ou Mac, a única opção é compilar a partir do código-fonte, é o mesmo processo de construção do compilador Elm.
Inicialize com elm-embed init
.
Execute incorporadores com elm-embed run
.
Obtenha ajuda com elm-embed --help
.
A melhor maneira de contribuir agora é fornecer casos de uso deixando um comentário aqui. Seja o mais detalhado possível. O que elm-embed
poderia fazer por você e como? O que precisaria ser alterado/adicionado?
Esses casos de uso realmente me ajudarão a tomar decisões de design mais informadas no futuro, mas não posso prometer que seu caso de uso específico será implementado. Quero que elm-embed
seja o melhor possível dentro de seu escopo, e isso significa rejeitar coisas que estão fora do escopo e também reservar um tempo para pensar sobre as coisas, em vez de apressar os recursos.