該工具正處於早期開發階段
重大變更和錯誤是預料之中的
讀取、解析環境變數和檔案內容並將其嵌入到您的 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
在其範圍內做到最好,這意味著拒絕超出範圍的東西,並花時間思考問題,而不是匆忙地添加功能。