Astroの3.0がリリースされました。 このブログはAstroで作成しており、テンプレートでAstroPaperを利用しています。
Astroのバージョンアップに伴いいくつか変更が必要になったため、簡単にですが変更点をまとめました。
変更点
利用可能なNodeJSのバージョンが18.14.1
からに変更
- Node 16はサポート外になりました
- このプロジェクトでは
18.14.0
を利用していたので、最新版の20.6.1
を利用するようにしました
開発時のデフォルトのポートが4321
に変更
3000
から4321
に変更されたので、開発時はlocalhost:4321
でアクセスします- https://docs.astro.build/en/guides/upgrade-to/v3/#changed-default-port-3000
TypeScriptのverbatimModuleSyntax
がデフォルトで有効化
- 必ず
import type
で型をimportする必要があります - https://docs.astro.build/en/guides/upgrade-to/v3/#changed-default-verbatimmodulesyntax-in-tsconfigjson-presets
// Before
import { CollectionEntry, getCollection } from "astro:content"
// After
import { type CollectionEntry, getCollection } from "astro:content"
astro check
が別パッケージとして分離
astro check
を使いたい場合のみインストールする方針になったようです。- 利用する場合は
@astrojs/check
とtypescript
をインストールする必要があります
- 利用する場合は
- https://docs.astro.build/en/guides/upgrade-to/v3/#moved-astro-check-now-requires-an-external-package
scopedStyleStrategy
のデフォルト値がattribute
に変更
where
からattribute
に変更されましたattribute
に変更されたことで詳細度が変化してレイアウトが崩れてしまっていたため、where
に戻す対応をしました
defineConfig({
scopedStyleStrategy: "where",
})
HTTPリクエストメソッドのケースが変更
- ローワーケースからアッパーケースに変更されました
- AstroPaperではRSS配信とOGImageの作成で利用しているため、
get
->GET
に変更しました
- AstroPaperではRSS配信とOGImageの作成で利用しているため、
export async function GET() {
const posts = await getCollection("blog")
const sortedPosts = getSortedPosts(posts)
return rss({
title: SITE.title,
description: SITE.desc,
site: SITE.website,
items: sortedPosts.map(({ data }) => ({
link: `posts/${slugify(data)}`,
title: data.title,
description: data.description,
pubDate: new Date(data.pubDatetime),
})),
})
}
compressHTML
のデフォルト値が変更
false
からtrue
に変更されましたtrue
に変更されたことで、(開発時を含む)ビルド時にHTMLがminifyされるようになりました- AstroPaperではパンくずリストの余白が消えてしまっていたため、スタイルの調整をしました
endpointでResponseオブジェクトを返す必要があるようになった
- v2ではオブジェクトを返すことが可能だったが、v3からは
Response
オブジェクトを返す必要があります- AstroPaperではOGImageの作成で利用しているため、以下のように変更する必要がありました
// Before
export const get: APIRoute = async ({ params }) => ({
body: await generateOgImage(params.ogTitle),
})
// After
export const GET: APIRoute = async ({ params }) =>
new Response(await generateOgImage(params.ogTitle))