Laravel×ViteでJSのwindowオブジェクトに代入した値が参照できず困った話

はじめに

Viteでビルドしたapp.js内でwindowオブジェクトに値を設定しても何故か参照できずエラーになってしまいました。

app.js

import jQuery from 'jquery';
window.$ = window.jQuery = jQuery;

app.jsの参照箇所

@vite(['resources/js/app.js'])
<script>
    console.log($.fn.jquery);
</script>

エラー内容

Uncaught ReferenceError: $ is not defined

解決するまでに時間が掛かったので、対応内容を共有したいと思います。

環境

  • Laravel v10.24.0
  • Vite v4.4.9

対応内容

scriptタグにtype=”module”を追加したら解決しました。

app.jsの参照箇所

@vite(['resources/js/app.js'])
<script type="module">
    console.log($.fn.jquery);
</script>

type=”module”の有無でJSの実行タイミングが変わるため、エラーになっていたようです。
※@Viteで生成されるscirptタグはデフォルトでtype=”module”が付与される。
※type=”module”が無いscriptタグのJSが先に実行されるため、結果的にapp.jsの実行前に$を参照する挙動になり、エラーとなっていた。

[参考サイト]
HTML Standard 4.12.1 The script element

おわりに

scriptタグのtype=”module”の有無でJSの実行タイミングが変わるとは知らなかったので、勉強になりました。
本記事が同じ現象に遭遇した方の参考になれば幸いです。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です