Fresh v2
#Fresh
はじめに
fresh v2向けに開発されていたコードがfreshのmainブランチにマージされています (major: import Fresh 2.0 code (#2449)) (2024/05/25)
そろそろfresh v2がリリースされる可能性がありそうなため、現時点で判明している変更点などについてまとめていきます
変更について
jsrへの対応
jsrへfresh関連のパッケージが公開されています (@fresh)
jsrパッケージに含まれるIslandコンポーネントのサポートも入っているようです (fix: error bundling JSR islands (#2552))
@fresh/examplesというパッケージが公開されています (feat: add @fresh/examples package (#2555))
preact/esbuildなどの読み込み
今まではpreactなどの読み込みにesm.shが活用されていました
fresh v2からはnpmレジストリから読み込む形に変更されそうです
例: www/deno.json
jsrへの公開に合わせた対応と思われます
この変更により、deno.lockも利用できるようになりそうです
chore: add back lockfile (#2508)
feat: re-enable lockfile in init (#2538)
また、これによりNode.jsなどからも利用できる余地は高まりそうな気はしています
ExpressライクなAPIの採用
プラグインシステムなどでより柔軟にroutesやミドルウェアなどの追加が行えるようになりそうです
code:typescript
import { App, fsRoutes, trailingSlashes } from "@fresh/core";
const app = new App({ root: import.meta.url })
// ミドルウェアの設定
.use(trailingSlashes("never"));
// ルーティングの設定
await fsRoutes(app, {
loadIsland: (path) => import(./islands/${path}),
loadRoute: (path) => import(./routes/${path}),
});
export { app };
fresh.gen.ts/fresh.config.tsの削除
これらはFreshの設定ファイルでしたが、Fresh v2では削除されています
createDefine() API
ページコンポーネントやHandlerなどの定義を簡素化するためのユーティリティ
例)
www/utils/state.ts - createDefine()を使用している箇所
www/routes/showcase.tsx - createDefine()により返却されたDefineAPIを活用して、ハンドラーやページコンポーネントを定義しています
APIドキュメント:
/icons/hr.icon
1. feat: rename helpers to define (#2453)
2. feat: add render function (#2454)
エラーページ
routes/_404.tsxやroutes/_500.tsxなどがroutes/_error.tsxに統合されているようです
参考: www: port error pages to Fresh 2 (#2456)
precompiled JSX transformの有効化
freshの初期化スクリプトでprecompiled JSX transformを有効化する対応が入っています (feat: init projects with jsx precompile (#2506))
esbuild関連
process.env.NODE_ENVが定義されるように (feat: inject process.env.NODE_ENV for third party libs (#2481))
サードパーティライブラリとの相互運用性の改善が目的
Twindプラグインの削除
Fresh v1では公式でTwindのプラグインが提供されていました
Fresh v2ではTwindプラグインは削除されています
Tailwind CSSプラグインは引き続き提供されています
Deno v2への対応
feat: update for Deno 2 (#2655)
OpenTelemetryサポート
Deno v2.1で実験的に導入されたOpenTelemetryサポートをベースに計装が進められているようです (feat: add open telemetry instrumentation (#2786))
DenoのOpenTelemetryサポートについて
Deno v2.1で導入されたOpenTelemetryサポートを試してみる
履歴
The road to Fresh 2.0 #2363が公開 (2024/03/15)
major: import Fresh 2.0 code (#2449) (2024/05/25)
jsrにパッケージが公開 (@fresh)
v2のアルファバージョンが公開 ()
マイグレーション
マイグレーションガイド
docs: add Fresh 2 migration guide (#2459)
fresh公式での対応
1. www: port error pages to Fresh 2 (#2456)
2. www: add back trailing slash handling (#2467) - 末尾の/の取り扱いの変更についての対応
3. www: switch to precompile jsx (#2469) - precompiled JSX transformの有効化
jsr.ioにおけるv1からv2への移行
chore: upgrade to Fresh 2 (jsr-io/jsr#558)