Web 应用程序
到目前为止,我们一直用Browser.element
创建 Elm 程序,使用户可以接管大型应用程序中的单个节点。这非常适合在工作中引入 Elm(如此处所述),但此后会发生什么?如何更广泛地使用 Elm?
在本章中,我们将学习如何创建包含多页面的“Web 应用程序”,它们相互很好地集成在一起,但我们必须先控制单个页面。
控制文档
第一步是切换到使用Browser.document
启动程序
document :
{ init : flags -> ( model, Cmd msg )
, view : model -> Document msg
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
}
-> Program flags model msg
参数与Browser.element
几乎完全相同,除了view
函数。您可以返回Document
(而不是返回Html
值),如下所示
type alias Document msg =
{ title : String
, body : List (Html msg)
}
这能让你控制<title>
和文档的<body>
。你的程序可能会下载一些数据,而这有助于你确定一个更具体的标题。现在你可以在view
函数中更改它!
提供页面
编译器默认生成 HTML,因此你可以像这样编译代码
elm make src/Main.elm
输出将是一个名为index.html
的文件,你可以像其他 HTML 文件一样提供该文件。这样做是没有问题的,但你可以通过(1)将 Elm 编译成 JavaScript 和(2)制作自己的自定义 HTML 文件来获得更高的灵活性。要执行此操作,可以如此编译
elm make src/Main.elm --output=main.js
这会生成main.js
,你可以从自定义 HTML 文件中加载该文件,如下所示
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Main</title>
<link rel="stylesheet" href="whatever-you-want.css">
<script src="main.js"></script>
</head>
<body>
<script>var app = Elm.Main.init();</script>
</body>
</html>
此 HTML 非常简单。你可以加载<head>
中需要的任何内容,并在<body>
中初始化 Elm 程序。Elm 程序会从那里开始并渲染所有内容。
无论哪种方式,现在您都可以发送到浏览器的 HTML 了。您可以将此 HTML 提供给免费服务,如 GitHub Pages 或 Netlify,或者制作自己的服务器并使用类似 Digital Ocean 的服务来运行 VPS。适合您的方式!您只需要一种将 HTML 发送到浏览器的方法即可。
注意 1:如果您使用 CSS 执行自定义操作,那么创建自定义 HTML 将很有帮助。许多人使用诸如
rtfeldman/elm-css
的项目,从 Elm 中处理他们的所有样式,但您可能在正在处理一个团队项目,其中有许多预定义的 CSS。该团队甚至有可能正在使用这些 CSS 预处理器之一。这皆无妨。只需将最终的 CSS 文件加载到 HTML 文件的<head>
中。注意 2:上面提到的 Digital Ocean 链接是一个推荐链接,因此如果您通过该链接注册并最终使用该服务,我们就能获得 25 美元,用来支付我们托管 costs
elm-lang.org
和package.elm-lang.org
的费用。