Astro 4.6

作者
Erika
Emanuele Stoppa
Matthew Phillips
Nate Moore
Bjorn Lu

经过发布周短暂的休息后,Astro 4.6 现已发布,我们回到了常规发布日程!此版本包含一个新的国际化手动路由策略、CSRF 保护的实验性支持、开发工具栏的新功能等等。

完整版本亮点包括

要升级现有项目,请使用自动化的 @astrojs/upgrade CLI 工具。或者,通过运行包管理器的升级命令来手动升级

# Recommended:
npx @astrojs/upgrade
# Manual:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

国际化手动路由策略

Astro 4.6 引入了国际化手动路由策略。对于默认路由策略无法完全满足需求的场景,这种新策略允许您完全控制国际化 Astro 网站的路由。

要启用手动路由,请在 astro.config.mjs 中将 i18n.routing 选项设置为 manual

astro.config.mjs
import { defineConfig } from "astro/config";
export default defineConfig({
i18n: {
locales: ["en", "fr"],
defaultLocale: "fr",
routing: "manual",
},
});

然后向您的项目添加一个中间件来处理路由

src/middleware.ts
import { defineMiddleware } from "astro:middleware";
import { redirectToDefaultLocale } from "astro:i18n";
// Example middleware that redirects all requests to the default locale apart for the /about page
export const onRequest = defineMiddleware(async (context, next) => {
if (context.url.startsWith("/about")) {
return next();
} else {
return redirectToDefaultLocale(context, 302);
}
});

另外,您可以使用 astro:i18n 中的新 middleware 函数导入 Astro 自己的中间件逻辑,以在默认路由策略的基础上进行构建。

src/middleware.js
import { defineMiddleware, sequence } from "astro:middleware";
import { middleware } from "astro:i18n"; // Astro's own i18n routing middleware
export const userMiddleware = defineMiddleware(() => {
// Your custom middleware logic here
});
export const onRequest = sequence(
userMiddleware,
middleware({
redirectToDefaultLocale: false,
prefixDefaultLocale: true
})
)

请查阅国际化文档,了解有关如何使用手动路由进行国际化的更多信息。

开发工具栏可移动

Astro 4.6 引入了将开发工具栏移动到屏幕底部不同位置的功能。如果您的粘性页眉覆盖了屏幕底部,或者您只是喜欢将工具栏放在其他位置,这会非常有用。开发工具栏旨在帮助您,而不是阻碍您!感谢 Ming-jun Lu 贡献了此项功能!

实验性:支持 CSRF 保护

Astro 4.6 增加了对 CSRF 保护的实验性部分支持。此功能目前处于实验性阶段,未来版本可能会有变动。

要启用它,请在 astro.config.mjs 中设置 experimental.security.csrfProtection 选项。

astro.config.mjs
import { defineConfig } from "astro/config";
export default defineConfig({
experimental: {
security: {
csrfProtection: {
origin: true,
},
},
},
});

启用此设置后,Astro 会检查所有现代浏览器自动传递的“origin”头是否与每个 Request 发送的 URL 匹配。如果不匹配,Astro 将响应 403 Forbidden 状态码。

请注意,此功能仅适用于按需渲染(也称为服务器端渲染)的页面。

Cookie 改进

感谢 Farzard,Astro 用于删除 cookie 的辅助函数(Astro.cookies.delete)现在允许设置更多 cookie 属性,而不仅仅是 pathdomain 属性。这也许是一个“小”改变,但绝对值得深入了解!

弃用对旧版本 Node.js 的支持

根据我们的 Node.js 支持和升级策略,此版本的 Astro 弃用了对以下版本的支持:

  • 低于 18.17.1 版本的 Node.js 18
  • Node.js 19(奇数版本)
  • 低于 20.3.0 版本的 Node.js 20。

正如我们的支持策略所述,此决定是经过仔细考量多种因素后做出的。我们相信这一改变将为所有用户带来更稳定、更安全的 Astro 体验。

您可以继续使用已弃用的 Node.js 版本,直到 Astro 的下一个主要版本 (v5) 发布。但是,在安装 Astro 时您可能会看到警告,并且某些功能可能无法正常工作。

错误修复

您懂的,Astro 4.6 包含了更多未在此发布帖子中提及的错误修复和小型改进!查阅完整的发布说明了解更多信息。