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 PagesNetlify,或者制作自己的服务器并使用类似 Digital Ocean 的服务来运行 VPS。适合您的方式!您只需要一种将 HTML 发送到浏览器的方法即可。

注意 1:如果您使用 CSS 执行自定义操作,那么创建自定义 HTML 将很有帮助。许多人使用诸如 rtfeldman/elm-css 的项目,从 Elm 中处理他们的所有样式,但您可能在正在处理一个团队项目,其中有许多预定义的 CSS。该团队甚至有可能正在使用这些 CSS 预处理器之一。这皆无妨。只需将最终的 CSS 文件加载到 HTML 文件的 <head> 中。

注意 2:上面提到的 Digital Ocean 链接是一个推荐链接,因此如果您通过该链接注册并最终使用该服务,我们就能获得 25 美元,用来支付我们托管 costs elm-lang.orgpackage.elm-lang.org 的费用。

项与 "" 匹配

    没有与 "" 匹配的项