您甚至还无法查看 Astro 的代码或文档(公开),它只是一个正在进行的想法,但您可以观看 Fred 向 Feross 展示它的视频。
我必须承认:它看起来很棒。 我看好它的两个主要部分
- Jamstack 是一个好主意。 生成静态的、预渲染的、最少的(或没有)JavaScript 页面非常明智。
- 组件是一个好主意。 从可组合组件构建界面是正确的抽象。 JavaScript 目前最擅长这一点,因为 ES 模块、模板字面量、Web Components、深度开发的工具等。
我也喜欢 Eleventy,而这在某种程度上感觉像 Eleventy,只是我不喜欢任何模板语言,就像我喜欢 JavaScript 组件一样。
以下是一些有趣方面的列表
- 就像 Vue 有
.vue
文件,Svelte 有.svelte
文件一样,Astro 在独特的格式中具有.astro
文件。 我喜欢它如何在类似 Frontmatter 的格式中强制执行 JavaScript 放在顶部。 - 它不会替换其他 JavaScript 库。 它就像一个构建在它们之上的站点构建器框架。 您实际上可以使用 React 和 JSX 组件,或 Vue 文件,或 Svelte 文件,包括使用该库的状态管理解决方案。 您在 Astro 文件中
导入
它们。 - 它具有文件系统即默认路由器,如 Next。
- 它默认具有作用域 CSS,如 Vue 的
<style scoped>
,这意味着它甚至不需要 CSS 模块,因为无论如何您都能获得所有好处。 - 它根本不会向前端发送任何 JavaScript,除非您专门选择加入(或使用其
:visible
语法,该语法仅注入足够的 JavaScript 以根据需要延迟加载更多内容)。 - 它采用了 Island 架构 的理念,即大多数站点由静态内容组成,只有部分内容是交互式/动态内容。
- 仅在交互式组件可见时(通过
IntersectionObserver
)请求 JavaScript 的想法是该框架的一等公民,有点像任何交互式内容的loading="lazy"
。 - 他们在主页上(针对“提出问题”)提到了 Marko(HTML/JavaScript 混合语言)。 让我想起了像 Alpine 或 htmx 这样的方法。
- 它偷偷地加入了 MDX(或类似的东西),这意味着您可以使用 Markdown 编写内容(不错),但也可以在其中偷偷加入
<Components />
(也不错)。
我非常喜欢它没有那种“这是一件新事物!你喜欢它!旧事物很糟糕!新事物很棒!”的氛围。 相反,它有一种“我们将从之前出现的所有好主意中窃取每一个,并依靠原生 Web 最擅长的东西”的氛围,这反过来又让我想起了 Baldur Bjarnason 的 “您是哪种寻求新奇的 Web 开发人员?”文章
坏的
这是第一种寻求新奇的 Web 开发人员。 这种类型的人只将历史视为一系列错误,并且新事物必须是好的,因为它们是新的。 为什么有人会创造新事物,除非它是对现状的改进? 因此,它一定是现状的改进。
好的
这是另一种寻求新奇的 Web 开发人员,他们试图建立在 Web 的历史和本质之上,而不是试图改变它。
这看起来很有趣——我总是介于 Next.js 和 Eleventy 之间——就像前者用于 React/MDX,后者用于速度和简单性。 Astro 可能会帮助我将两者混合使用。 期待尝试它。
我创建了 HTMF,它类似于 HTMX 等。 它是渐进增强的 MPA/SPA。 超级简单。
https://github.com/jon49/htmf
Jon Neal 关于可见性技巧
还有一些关于 MDX 在此上下文中实用性的额外背景信息。 这是 Josh W. Comeau 关于 他如何构建他的博客 的内容
Josh 在许多博文中有效地利用了这一点来创建交互式演示。 并不是说你不能以任何其他方式做到这一点,但将其作为 React 组件的可用性非常有意义。
绝对是我会关注的东西。
我与你对 Eleventy 的感受相同。 它是一个很棒的 SSG,但我更喜欢基于组件的设置。
Elder.js 是另一个你可能想查看的 SSG,它试图解决一些相同的问题。 我刚刚用它重新做了我的个人网站,并计划在未来的更多项目中使用它。 它基于 Svelte,因此所有内容都位于
.svelte
文件中。 而且它默认也是 0kb JavaScript;如果包含交互式组件,它默认使用IntersectionObserver
进行部分水合。