💬
Nuxt3のアプリケーションでngrok経由だとHMR(ホットリロード)が効かない
シンプルにNuxt3のアプリケーションのポートをフォワーディングしてもHMRが効かなかったのでメモです。
nuxt v3.12.3です。
どうしたら動いたか
nuxt.config.ts
export default defineNuxtConfig({
...etc
// nuxt側でprotocolいじってるらしくhooksでいれないと上書きされる
'vite:extendConfig'(config) {
config.server = {
...config.server,
hmr: {
// booleanかオブジェクトなのでts的にはこの書き方はアウト
// 判定をきちんとするほどでもないかと思ったのでとりあえず回避
// @ts-expect-error
...config.server?.hmr,
// localhostではホットリロード効かなくなるのでlocalhostみるときはコメントアウト
protocol: 'wss',
},
}
},
},
})
なんで上記で動いたのか
細かいところはNuxtのソース読む時間がなく調べてないのでわかってないです。
が、おきたエラーと状況から見た推察だけしておきます。
エラー
client:535 Mixed Content: The page at 'https://xxx.ngrok.io/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://xxx.ngrok.io/_nuxt/'. This request has been blocked; this endpoint must be available over WSS.
- webページの読み込みはhttps
- webSocketはws
- httpsとwsでプロトコルが噛み合ってないのでエラーが出る
- nuxtの設定をいじって、wssで通信する様に指定したのでできた?
参考文献
メモ
参考文献のやつもひとしきりやってみたんですが、上手くいかなかったです。
バージョンの違いが主な原因だとは思います。
Discussion