Astro 4.2 版本发布,社区驱动的里程碑

2024-01-25 09:50:17 浏览数 (2)

Astro 4.2版本终于和大家见面了!这不仅仅是一个新版本的发布,更是一个重要的里程碑。这个版本的特别之处在于,它几乎完全由社区的贡献者们亲手打造。这一成就不仅展示了Astro作为一个项目的成熟和发展,更重要的是,它标志着Astro已经拥有了一个充满活力和创造力的开发者社区。这个社区不仅参与到日常的开发工作中,还在推动整个项目向前发展,为Astro书写了新的篇章。接下来让我们深入了解其新特性、配置选项和改进点。

1. 实验性特性:基于 Speculation Rules API 的页面预渲染

特性说明:Astro新增了一个实验性功能,使用Speculation Rules API来预渲染页面。这项技术能够在客户端预渲染用户可能接下来会访问的页面,提高浏览速度。

如何启用:

代码语言:javascript复制
import { defineConfig } from 'astro/config';

export default defineConfig({
  prefetch: true,
  experimental: {
    clientPrerender: true,
  },
});

通过在astro.config.mjs中设置clientPrerender为true来启用此功能。

这将遵循您现有的预取配置选项,但现在将在客户端上预呈现所有带有 data-astro-prefetch 属性的链接。为尚不支持推理规则 API 的浏览器提供了内置回退。

此外,还可以在标记中使用 document.prerendering 属性<script>来检查页面是否正在预呈现:

代码语言:javascript复制
<script>
  if (document.prerendering) {
    // prerendering is enabled
  }
</script>

更多细节,请参照官方文档链接

https://docs.astro.build/en/reference/configuration-reference/#experimentalclientprerenter

2. 路由优先级重构

在之前的版本中,通过injectRoute() API注入的路由被赋予了最高的匹配优先级,这意味着它们会在所有其他路由之前进行匹配。这样的设计初衷是好的,但实际上却导致了很多难以调试的问题,比如某些路由可能不会按预期进行匹配。

在软件开发中,对路由系统的任何改变都可能引起一系列预期之外的问题。因此,Astro团队一直对更改这一行为持谨慎态度。然而,在Luiz Ferraz的细心实现下,Astro 4.2带来了一个实验性的标志,为Astro建立了一个新的、改进的默认路由系统的基础。

在这个新的实验性路由系统中,使用injectRoute() API注入的路由和重定向将遵循与文件系统路由相同的优先级顺序。这种设计提供了更稳定、一致的路由优先级排序规则,有助于避免以前遇到的一些问题。

要尝试这个新的路由系统,你可以在astro.config.mjs文件中启用新的 experimental.globalRoutePriority选项:

代码语言:javascript复制
import { defineConfig } from 'astro/config';

export default defineConfig({
  experimental: {
    globalRoutePriority: true,
  },
});

此外,Astro还增加了额外的日志记录功能,帮助开发者了解任何路由冲突的情况,例如两个路由尝试构建相同的URL。更多关于这个实验性特性的细节,可以参考Astro的官方文档中的 experimental.globalRoutePriority部分。

总的来说,这个改进为Astro的路由系统带来了更大的灵活性和稳定性,使得开发者能够更加精确地控制路由的行为。

3. 新配置选项:redirectToDefaultLocale

Astro 4.2引入了一个新的配置选项redirectToDefaultLocale,这是对国际化支持功能的一个重要补充。自从Astro 4.0引入国际化支持以来,一个常见的需求就是能够控制是否将根URL(/)自动重定向到默认的语言版本。这个新选项就是为了满足这一需求而设计的。

功能介绍:当设置了prefixDefaultLocale: true(即使用默认语言的前缀),你可以使用redirectToDefaultLocale选项来控制是否将访问根URL的用户自动重定向到默认语言版本的URL。

默认行为:默认情况下,这个选项是启用的,意味着访问根URL时会自动重定向到默认语言版本。

配置示例:如果你想禁用这个自动重定向功能,可以在你的astro.config.mjs文件中进行如下设置:

代码语言:javascript复制
import { defineConfig } from 'astro/config';

export default defineConfig({
  i18n:{
    defaultLocale: "en",
    locales: ["en", "fr"],
    routing: {
      prefixDefaultLocale: true,
      redirectToDefaultLocale: false
    }
  }
});

通过在astro.config.mjs中设置redirectToDefaultLocale为false,可以禁用自动重定向。

在这个示例中,尽管我们设置了默认语言为英语("en"),并且启用了默认语言前缀,但是我们通过将redirectToDefaultLocale设置为false来禁用了从根URL到默认语言版本的自动重定向。

这个新选项提供了更多的灵活性,让开发者能够根据自己的需要和场景来决定是否启用自动重定向功能。对于构建多语言网站的开发者来说,这是一个非常实用的功能改进。

4. 改进的可访问性规则

改进详情:Astro Dev Toolbar中的可访问性规则进行了更新,使其更加符合WCAG指南,减少了误报。

5. Markdown中的自定义图片优化

新版本允许开发者在Markdown文件中自定义图片优化的方式。这一改进是由社区成员Oliver贡献的,它为Astro的Markdown处理增添了更多的灵活性和控制力。

在之前的版本中,Markdown文件中使用原生语法插入的图片(如![alt](src))都会使用Astro默认的图片优化设置。然而,这一新特性允许开发者通过remark插件定制化这些设置,为图片节点添加特定的属性来控制其优化方式。

例如,下面的remark插件代码演示了如何为每个图片节点设置宽度和高度属性为100:

代码语言:javascript复制
import { visit } from "unist-util-visit";

export default function remarkPlugin() {
  return (tree) => {
    visit(tree, 'image', (node) => {
      node.data.hProperties = node.data.hProperties || {};
      node.data.hProperties.width = "100";
      node.data.hProperties.height = "100";
    });
  };
}

通过此插件,开发者可以为Markdown文件中的每个图片节点设置特定的属性,如宽度和高度。

在这个示例中,该插件遍历Markdown文档中的所有图片节点,并为它们添加width和height属性。这样,当Markdown文档被处理时,这些图片会根据这些自定义的属性进行优化处理。

这个特性目前仅适用于Markdown文件,但Astro团队计划在未来的版本中也为MDX文件添加这一支持。通过这种方式,Astro为开发者提供了更大的自由度来优化和控制Markdown文档中的图片表现,这对于希望精细控制其内容表现的开发者来说是一大福音。

升级至Astro 4.2

要使用这些新特性,需要升级到最新版本的Astro。可以通过运行下列任一命令来实现:

代码语言:javascript复制
npx @astrojs/upgrade
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

结束

Astro 4.2的发布标志着其社区贡献的成熟,为前端开发者带来了更多实验性特性和改进。这些新特性不仅展示了Astro的技术创新,也体现了其作为一个开源项目的活力。对于热衷于前端技术的开发者而言,这无疑是一个值得探索和实践的新版本。

内容参考来源官网: https://astro.build/420/blog/astro-

0 人点赞