发布于 2026-01-06 1 阅读
0

“elm-starter”是一款面向现代Web目标的工具。它的功能是什么?演示、幕后花絮、SEO、类似项目。关于现代Web与传统Web的比较。如何使用elm-starter。DEV全球展示挑战赛,由Mux呈现:展示你的项目!

“elm-starter”,一款面向现代网络的工具

目标

这个工具是做什么用的?

演示

幕后花絮

SEO

类似项目

关于现代网络与传统网络

如何使用elm-starter

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

最近关于现代网络的一些讨论很有意思

我个人认为

  • 单页应用程序 (SPA) 在某些情况下被滥用,而更传统的服务器端方法可能更合适。
  • 单页应用需要格外注意(导航、滚动、可访问性、搜索引擎优化等)。
  • 许多单页应用(SPA)设计得并不精良,但如果设计得当,SPA 可以极大地提升用户体验。
  • 浏览器才是处理复杂用户界面的天然场所,而不是服务器。
  • 作为开发者,我(我们?)喜欢继续使用最好的工具来改善开发者体验。

关于最后一点,我觉得榆树语似乎带有某种诅咒

一旦你来到榆树镇,你就会想留在榆树镇。”

这种情况不仅发生在 Elm 语言中,而且发生在任何编译型、严格类型、类型推断、不可变、纯函数式且具有友好错误处理的语言中。

为了缓解这些问题,我编写了一个小脚本,将 Elm SPA 转换为静态生成的渐进式 Web 应用程序 (PWA),名为elm-starter

(是的,又一个


目标

目标是拥有一个工具,该工具

  • 主要用榆木书写(参见上文提到的诅咒
  • 支持大多数 Elm 库(elm-uielm-spa等)。
  • 使用起来相对简单。
  • 可用于引导启动新应用程序或转换现有应用程序
  • 它不具侵入性,可以随时移除。

最终得到的 PWA 应具备以下特征

  • 无需 Javascript 即可运行
  • 可离线使用
  • 可安装在手机/电脑上
  • 对机器人友好(SEO)
  • 支持预览卡
  • 渲染速度快(在 Lighthouse 测试中获得高分)

经典的灯塔截图,还有彩带飘落🎉

经典的灯塔截图,上面飘着五彩纸屑。

Lighthouse 获得高分。嗯,这是一款几乎没什么内容的应用程序,但即便如此……

在 Slack 中预览卡片:

在 Slack 中预览卡片

在 Slack 中预览卡片。不同的路线有不同的预览。

这个工具是做什么用的?

  • 生成 PWA 所需的所有文件
  • 将所有元数据集中到一个“单一数据源”中。
  • 生成静态页面

就这些。很简单!

演示

有 3 个使用以下技术制作的演示elm-starter

替代文字

这里展示的是使用 `elm-starter` 制作的 3 个演示,它们在 macOS 上的安装版本如下所示。

1.官方 elm-starter演示版

这是一个使用 SVG 对象的简单单页应用 (SPA)。它展示了 SPA 和多平台应用 (MPA) 的一个区别:页面过渡效果。此应用在启用和禁用 JavaScript 的情况下均可运行。唯一的区别是:禁用 JavaScript 时,不会有页面过渡效果。

请注意,页面过渡效果是通过对 SVG 应用 CSS 过渡实现的。我后来才意识到这仅在 Chrome 浏览器中受支持,而且我没有时间进行修改,但你应该能明白我的意思。

以下是启用和禁用 Javascript 的区别:

替代文字

第一组点击操作是在启用 Javascript 的情况下进行的,其余点击操作是在禁用 Javascript 的情况下进行的。

2. 待办事项 MVC

这是经典的 Todo MVC,我曾在之前的文章中大量使用它来比较不同的框架

这段代码最初由 Evan Czaplicki 编写,我只是对其进行了一些调整以修复一些辅助功能问题。

与之前的演示相比,由于其自​​身特性,这个演示在没有 Javascript 的情况下是无法运行的。

Slack上的预览卡片:

Slack上的预览

3.elm-spa示例

这个例子展示了 elm-spa 的一个潜在协同作用。elm-spa 是一种创建复杂单页应用程序 (SPA) 的便捷工具,它通过自动生成 Elm 代码来处理许多事情。例如,要创建新页面,您只需在终端运行一个命令,它就会自动创建所需的文件、路由和逻辑。

elm-starter然后可以接管并将其转换为 PWA,静态生成所有路由。

在这个具体的例子中,所有页面都可以在没有 Javascript 的情况下访问,但是需要 Javascript 的小部件(例如计数器)将无法工作。

Slack上的预览卡片:

Slack 上的预览卡

幕后花絮

  • 所有文件均由 Elm 代码生成:

    • HTML:使用修改版的zwilias/elm-html-string生成。例如,Index.elm生成index.html
    • JSON:使用elm/json生成。例如,Manifest.elm生成manifest.json
    • CSS:由字符串生成。我知道这并非理想方案。rtfeldman /elm-css(即具有 Elm 类型安全性的 CSS)似乎没有公开toString转换器。无论如何,所需的 CSS 代码量elm-starter非常小,所以我将其保留为字符串。例如SnippetCss.elm
    • Javascript:由字符串生成。同样,运行应用程序所需的 Javascript 代码量极少,所以我将其保存为字符串。对于大量的 Javascript 代码,最好将其保存在.js文件中。例如,SnippetJavascript.elm
  • 所有静态页面和快照均使用Puppeteer生成

  • 大部分 CSS 和 Javascript 代码都采用“逗号前导”或“分号前导”的格式(抱歉,我忍不住又用了这个例子,请再次见上文提到的Elm诅咒)。

这是Index.elm生成的快照index.html

替代文字

SEO

每个页面都是静态生成的,带有特定的元标签,以便搜索引擎蜘蛛能够轻松抓取它,即使它们不像谷歌那样先进,谷歌很久以前就能执行 Javascript 了

有人说,即使谷歌可以运行 Javascript,它仍然更喜欢静态网站。

这是谷歌elm-starter在演示版发布几天后对其进行索引的方式:

Google 正在索引 elm-starter 演示

Google 正在索引 elm-starter 演示

类似项目

以下是一些其他优秀的项目,可用于引导 Elm 应用程序或生成静态网站:

关于现代网络与传统网络

想要更深入地了解本文开头提到的争论:

如何使用elm-starter

您可以elm-startergithub.com/lucamug/elm-starter找到它。

开始使用它的最快方法是点击此按钮:

部署到 Netlify

这将自动

  • elm-starter在您的 GitHub 帐户中创建一个包含以下内容的存储库
  • 使用您的 Netlify 帐户将其部署到线上。

要修改应用程序,只需将新仓库克隆到您的计算机上并运行:

$ npm install
$ npm start
Enter fullscreen mode Exit fullscreen mode

现在您可以进行编辑,并在http://localhost:8000src/Main.elm确认结果后,将您的修改提交到 Github。

Netlify 将在几秒钟内自动发布新应用,包括重新生成所有静态页面。

更多信息请参见README文件。


就这些了,谢谢阅读!❤️


封面图片:从河口湖眺望富士山,图片来自 Pixabay用户WorldInMyEyes 。

文章来源:https://dev.to/lucamug/elm-starter-a-tool-for-the-modern-web-53b1