该工具正处于早期开发阶段
重大变更和错误是预料之中的
读取、解析环境变量和文件内容并将其嵌入到您的 Elm 代码中。
数据通过嵌入器嵌入。嵌入器位于一个特殊文件夹elm-embed-scripts
中,它们是带有Embed.Task
签名的任何 Elm 声明。使用嵌入器与使用 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 "
当环境变量server_url
设置为localhost:8080
时运行elm-embed run
将在src/Generated/Server.elm
中提供以下内容:
server : String
server =
" localhost:8080 "
您可能想从 Markdown 文档而不是 Elm 代码创建页面。正常的方法是将文档作为字符串包含在内,然后在运行时解析并呈现它。这有几个缺点。解析需要时间。手动将 Markdown 嵌入 Elm 字符串也很烦人且容易出错。最后,您必须处理解析失败的情况,并向用户提供某种错误页面。使用elm-embed
您可以读取.md
文件,在构建时对其进行解析,如果解析失败,您将在构建时以开发人员的身份而不是在运行时以用户的身份收到错误。
此示例使用 dillonkearns/elm-markdown 解析 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
在其范围内做到最好,这意味着拒绝超出范围的东西,并花时间思考问题,而不是匆忙地添加功能。