Skip to content

Commit ef37449

Browse files
authored
docs: clarify dynamic new URL(foo, import.meta.url) behavior (#1707)
resolve #1704 vitejs/vite@d969d4d の反映です。
1 parent 265a4fe commit ef37449

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

guide/assets.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ document.getElementById('hero-img').src = imgUrl
135135
136136
```js
137137
function getImageUrl(name) {
138+
// サブディレクトリー内のファイルは含まれないことに注意してください
138139
return new URL(`./dir/${name}.png`, import.meta.url).href
139140
}
140141
```
@@ -146,6 +147,25 @@ function getImageUrl(name) {
146147
const imgUrl = new URL(imagePath, import.meta.url).href
147148
```
148149
150+
::: details 動作の仕組み
151+
152+
Vite は `getImageUrl` 関数を次のように変換します:
153+
154+
```js
155+
import __img0png from './dir/img0.png'
156+
import __img1png from './dir/img1.png'
157+
158+
function getImageUrl(name) {
159+
const modules = {
160+
'./dir/img0.png': __img0png,
161+
'./dir/img1.png': __img1png,
162+
}
163+
return new URL(modules[`./dir/${name}.png`], import.meta.url).href
164+
}
165+
```
166+
167+
:::
168+
149169
::: warning SSR では動作しません
150170
ブラウザーと Node.js で `import.meta.url` のセマンティクスが異なるため、 このパターンは Vite をサーバーサイドレンダリングで使用している場合には動作しません。サーバーバンドルは事前にクライアントホストの URL を決定することもできません。
151171
:::

0 commit comments

Comments
 (0)