最近遇到了 îles,一个主要围绕 Vue 的新的静态网站生成器。世界上并不缺乏静态网站生成器,但看到这一“下一代”SSG 的关注点或试图解决的问题很有意思。

îles 似乎从 Astro 中汲取了大量灵感。如果我们将它们与其他新兴且快速发展的 SSG 放在一起考虑,就会发现一些相似之处。
- 默认情况下不发送任何 JavaScript。交互式内容是可选的——这就是“岛屿”隐喻的意义所在。Astro 和 îles 在组件级别执行此操作,而 SvelteKit 则更倾向于在 页面级别 执行。
- 围绕水合发生时间的控制提供了更多花哨的功能,例如“浏览器空闲时”或“组件可见时”。
- 使用快速的构建工具,例如 Vite,它在底层使用了基于 Go 的 esbuild。或者在 Next 12 的情况下使用基于 Rust 的 swc。
- 支持多个 JavaScript 框架用于组件化。Astro 和 îles 默认情况下支持这一点,另一个例子是 Slinkity 如何将其引入 Eleventy。
- 基于文件系统的路由。
- 假设使用 Markdown 作为内容。
当您将这些与第一批 SSG(如 Jekyll)进行比较时,我有一些感受。
- 它们实际上并没有那么大的不同。功能集在很大程度上是相同的。
- 最大的变化可能是其中更多的是基于 JavaScript 库的。事实证明,JavaScript 库正是人们真正想要的从 HTML 预处理器 中获得的东西,这可能是因为人们强烈关注组件。
- 它们是渐进式改进的。它们更快,实时重新加载更好,常见需求已得到解决。
您的网站现在依赖于无数的 npm 包,这些包可能某天会崩溃/冲突。
啊,PHP 开发人员。必须爱他们。
对我来说,最重要的改进似乎与水合方面的花哨功能有关。将这些 JavaScript 方面简化为单行代码对开发产生了巨大的影响。它使构建网站本身变得更加有趣,因为我专注于网站本身,而不是构建网站的工具。
Hugo 与这些相比如何?它是否可以进行比较?
我们一直在为我们的登陆页面开发一个新网站,并使用 Hugo 和 Astro 开发了原型。我想说最大的区别在于 Astro(我没有看过 íles,但我认为它与 Astro 类似)是基于 JSX 的并且很大程度上是不固执己见的,而 Hugo 则更像是一个严格的模板系统。
看起来 Astro 由于以下原因而胜出。
1) 在 Astro 中,样式可以作用域到组件,这意味着如果未包含组件,则其样式也不会包含。我们无法使用 Hugo 实现这一点。虽然它确实具有资产管理系统,但它没有组件作用域样式的概念。虽然我不是这方面的最终权威,但我尝试了几个小时来实现它,但未能成功。您可能需要分叉 Hugo 并使用该功能构建自己的二进制文件。
2) 使用 Astro,您可以利用现代前端框架的全部功能,而无需客户端成本(除非您在组件级别选择加入)。这些框架周围的生态系统在过去几年中蓬勃发展,我发现它们使用起来很愉快。开发工具非常棒。组件挂载、卸载以及在状态更改时运行副作用的概念,我发现它们在较新的框架中比在原生 JavaScript 中更容易实现(因为这就是它们存在的目的)。使用 Hugo,您需要将 JavaScript 与 HTML 分开编写。这很好,但我喜欢在 {react、svelte 等} 中编写 JavaScript,因为它们使复杂的事情变得非常容易。此外,我喜欢将 HTML、CSS 和 JS 都放在同一个文件中。结合组件/JSX 思想,我发现所有这些都是开发网站的一种更合理的方式。可以考虑所有依赖项,并且您确切地知道您的 CSS 和 JS 是为了什么。
3) 我最后一点也与以下事实相关:您可以在 Astro 中获得许多资产管理的优势,而这些优势在 Hugo 中找不到,因为 Astro 是现代工具链的产物。它会对如何处理 CSS 和 JavaScript 做出明智的决定。
当然还有更多原因,但这已经是一条很长的评论了!
我完全同意它们非常相似,事实上,Jekyll 是 îles 的主要灵感来源。
在发布 Jekyll Vite 之后,我开始使用 îles,并且感觉组件化仍然很笨拙(包含标签)。
仍然缺少 Jekyll 在集合方面的一些优点,但计划很快解决。
我还要说的是,由于 Vite,这些现代工具中的资产管理要简单得多。您可以使用任何工具,而无需等待热心人士将其包装在 Ruby gem 中。
这些新工具的另一个好处是它们可以预渲染将要水合的组件,从而防止 FOUC 和布局偏移。
这导致网站的 UX 实现了切实的改进。
我赞同 Joeee 的问题,这些新的基于 JS 的 SSG 与基于 Go 的 Hugo 相比如何?
它们只是在迎头赶上吗?Hugo 已经拥有速度和基于文件系统的路由。
我很想看到一篇关于最新 SSG 添加了哪些 Hugo 没有的功能的文章。
Hugo 对我来说似乎非常相关,特别是因为它的速度。
查看我们报告的所有内容的真实数据。
但是,它不是基于 JavaScript 库的,正如我提到的,这感觉很重要。您嵌套它们并传递 props 的方式以及其他类似的操作正在成为 HTML 处理的一种事实上的方式。