ブラウザでJavaScriptモジュールが使えるようになりました。
<script type="module">
って書くやつです。
これを使うとimport/exportを使ってモジュール感の依存関係が解決できます。
これまでは人間がscriptタグの順番を決めるか、Webpackのようなモジュールバンドラーで事前処理する必要がありました。
さらにそれ以前は、jQueryのようなグローバル変数を使って、依存関係を解決していました。
jQuery時代の依存関係解決からJavaScriptモジュールに一気にジャンプ出来るのでしょうか? それとも一度Webpackのようなモジュールバンドラーを経由する必要があるのでしょうか? ということを試してみます。 次のindex.htmlではJavaScriptモジュールとして、index.jsを読み込みます。
<head> <script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script> <script type="module" defer> import init from './index.js' init() </script> </head> <body> <div id="hoge"></div> </body>
index.jsではすでに読み込まれているはずのjQueryを参照します。
export default function () { $("#hoge").text("hello"); }
これが動くのかというと、動きます。 次のようにHTTPサーバーで起動します。
python3 -m http.server
open htttp://localhost:8000
HTTPサーバーを起動しないと、index.jsをローカルファイルから読もうとします。 これはエラーになります。
モジュールバンドラーを使っていなくても、<script type="module">
を使ってWeb標準の依存関係解決をやっていけることがわかりました。