Esta herramienta se encuentra en desarrollo inicial.
Se esperan cambios importantes y errores.
Lea, analice e incruste variables de entorno y contenido de archivos en su código Elm.
Los datos se incrustan con Embedders . Los incrustadores viven dentro de una carpeta especial, elm-embed-scripts
, y son cualquier declaración de Elm con la firma Embed.Task
. Trabajar con incrustadores es similar a trabajar con decodificadores JSON; por ejemplo, puede leer un archivo con Embed.File.read
y analizarlo con Embed.andThen
. Si el análisis tiene éxito, puede incrustar el valor con Embed.succeed
y, si falla, puede informar el motivo con Embed.fail
. Si todos los incrustadores tienen éxito, los valores resultantes se generarán y se colocarán como código Elm dentro de src/generated
donde podrán ser consumidos por el resto del código base.
Al desarrollar, es posible que desee utilizar un servidor local en lugar del de producción. Para lograrlo, se puede incrustar una variable de entorno que contenga la URL del servidor a utilizar.
elm-embed-scripts/Server.elm
:
import Embed
import Embed.Environment
server : Embed . Task String
server =
Embed . Environment . string " server_url "
Ejecutar elm-embed run
cuando la variable de entorno server_url
está configurada en localhost:8080
le dará esto dentro de src/Generated/Server.elm
:
server : String
server =
" localhost:8080 "
Es posible que desee crear una página a partir de un documento de rebajas en lugar del código de Elm. El enfoque normal sería incluir el documento como una cadena y luego analizarlo y representarlo en tiempo de ejecución. Esto tiene varios inconvenientes. El análisis lleva tiempo. También es molesto y propenso a errores incrustar rebajas en una cadena de Elm a mano. Por último, debe lidiar con el caso en el que falla el análisis y brindarle al usuario algún tipo de página de error. Con elm-embed
puede leer un archivo .md
, analizarlo en tiempo de compilación y, si el análisis falla, obtendrá el error como desarrollador en tiempo de compilación en lugar de como usuario en tiempo de ejecución.
Este ejemplo analiza un documento de rebajas con 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: Si está interesado en esto, puede que valga la pena consultar también las páginas de elm. Puede realizar análisis de rebajas en el momento de la construcción y muchas otras cosas interesantes, incluidas las baterías. elm-embed
es una herramienta para una cosa específica, mientras que elm-pages
es más bien un tipo de acuerdo marco.
elm-embed
coloca algunos módulos propios en elm-embed-scripts
para que los utilicen sus integradores. Puede ver la API completa para esos módulos aquí.
Al ejecutar el código siguiente se descargará un binario prediseñado para Linux de 64 bits, lo hará ejecutable y lo colocará en /usr/local/bin
. Esto funciona para la mayoría de las distribuciones de 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/
Ahora elm-embed
debería poder invocarse desde la línea de comandos.
Desinstalar con sudo rm /usr/local/bin/elm-embed
Actualmente no hay binarios prediseñados para Windows o Mac, la única opción es compilar desde el código fuente; es el mismo proceso que cuando se compila el compilador Elm.
Inicialice con elm-embed init
.
Ejecute incrustadores con elm-embed run
.
Obtenga ayuda con elm-embed --help
.
La mejor manera de contribuir en este momento es brindarme casos de uso dejando un comentario aquí. Sea lo más detallado posible. ¿Qué podría hacer elm-embed
por usted y cómo? ¿Qué habría que cambiar/añadir?
Estos casos de uso realmente me ayudarán a tomar decisiones de diseño más informadas en el futuro, pero no puedo prometer que se implementará su caso de uso específico. Quiero que elm-embed
sea lo mejor que pueda dentro de su alcance, y eso significa rechazar las cosas que quedan fuera del alcance y también tomarse el tiempo para pensar las cosas detenidamente, en lugar de apresurar las funciones.