Skip to content

Commit 9fa0a07

Browse files
authored
feat(experimental): add fetchable environment interface (#1895)
1 parent 8f77b07 commit 9fa0a07

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

guide/api-environment-frameworks.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,48 @@ if (isRunnableDevEnvironment(server.environments.ssr)) {
3838
```
3939

4040
:::warning
41-
`runner` は、初めてアクセスされたときに即座に評価されます。Vite は、`process.setSourceMapsEnabled` を呼び出して `runner` が作成されたとき、またはそれが利用できない場合は `Error.prepareStackTrace` をオーバーライドすることによって、ソースマップのサポートを有効にすることに注意してください。
41+
`runner` は、初めてアクセスされたときにのみ遅延評価されます。Vite は、`process.setSourceMapsEnabled` を呼び出して `runner` が作成されたとき、またはそれが利用できない場合は `Error.prepareStackTrace` をオーバーライドすることによって、ソースマップのサポートを有効にすることに注意してください。
42+
:::
43+
44+
`Fetch API`[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch))を介してランタイムと通信するフレームワークは、`handleRequest` メソッドを通じてリクエストを標準化された方法で処理する `FetchableDevEnvironment` を利用できます:
45+
46+
```ts
47+
import {
48+
createServer,
49+
createFetchableDevEnvironment,
50+
isFetchableDevEnvironment,
51+
} from 'vite'
52+
53+
const server = await createServer({
54+
server: { middlewareMode: true },
55+
appType: 'custom',
56+
environments: {
57+
custom: {
58+
dev: {
59+
createEnvironment(name, config) {
60+
return createFetchableDevEnvironment(name, config, {
61+
handleRequest(request: Request): Promise<Response> | Response {
62+
// リクエストを処理し、レスポンスを返します
63+
},
64+
})
65+
},
66+
},
67+
},
68+
},
69+
})
70+
71+
// Environment API のどの利用者からも `dispatchFetch` を呼び出せるようになりました
72+
if (isFetchableDevEnvironment(server.environments.custom)) {
73+
const response: Response = await server.environments.custom.dispatchFetch(
74+
new Request('/request-to-handle'),
75+
)
76+
}
77+
```
78+
79+
:::warning
80+
Vite は、`dispatchFetch` メソッドの入力と出力を検証します。リクエストはグローバル `Request` クラスのインスタンスである必要があり、レスポンスはグローバル `Response` クラスのインスタンスである必要があります。そうでない場合、Vite は `TypeError` をスローします。
81+
82+
`FetchableDevEnvironment` はクラスとして実装されていますが、Vite チームからは実装の詳細と見なされており、いつでも変更される可能性があることに注意してください。
4283
:::
4384

4485
## Default `RunnableDevEnvironment`
@@ -52,6 +93,7 @@ import { fileURLToPath } from 'node:url'
5293
import { createServer } from 'vite'
5394

5495
const __dirname = path.dirname(fileURLToPath(import.meta.url))
96+
5597
const server = await createServer({
5698
server: { middlewareMode: true },
5799
appType: 'custom',

0 commit comments

Comments
 (0)