webpackでTop-Level Awaitを使用して、一番上位でもawaitを使えるようにする方法

いままで非同期処理をするときにawaitを使用したい場合、async内でしか使えませんでした。
そのため、awaitを速実行したい場合はasyncの無名関数を作ってその中で実行していました。
(async() => {
// ここでawaitを使用する
})();
// 関数外だと、awaitは使えないしかし、Top-Level Awaitはその名前の通り、一番上位に限りawaitが使えるようになります(関数内の場合はasyncを付けていないと実行できません)。
webpackを使った環境で、このTop-Level Awaitを有効化する必要が出てきたので、方法を備忘録として残しておきます。
webpack.config.jsへの記述
「webpack.config.js」ファイル内にTop-Level Awaitを有効化する記述を追加します。
module.exports = {
module: {
rules: [
{
// 省略
},
],
},
experiments: {
topLevelAwait: true,
},
plugins: [],
};対象となる記述は「experiments」内に「topLevelAwait」を追加して、trueにすると有効化されます。
experiments: {
topLevelAwait: true,
},webpack.mix.js
Laravel Mixを使っている場合は、設定ファイルが「webpack.mix.js」になります。
その場合も同じように「experiments」内に「topLevelAwait」を追加すれば反映されます。
mix.webpackConfig({
resolve: {
alias: {
'@': __dirname + '/resources/js/src'
}
},
experiments: {
topLevelAwait: true,
},
});有効化せずに使った場合のエラー表示
もし、Top-Level Awaitを有効化せずに使った場合は下記のようなエラーが表示されます。
Module parse failed: The top-level-await experiment is not enabled (set experiments.topLevelAwait: true to enabled it)有効化したにもかかわらず、このエラーメッセージが表示される場合は、設定方法を間違えているので対象のファイルを確認しましょう。

scpコマンドでターミナル接続先のリモートファイルをローカルにダウンロードする方法
Visual Studio CodeでMovable TypeのMTMLファイルを開く拡張機能「Movable Type Markup Language Syntax」
JetpackでのError during WebSocket handshakeの解決方法
サイトを運営する時必ず登録しておきたいGoogle Search Console(サーチコンソール)の登録方法
Visual Studio CodeでCSVの編集を見やすく行う拡張機能「Edit csv」
gulp 4.0から新しく加わったseriesとparallelについての備忘録
CSSで1行で簡単にスムーススクロールを実装できる「scroll-behavior」プロパティ
HTMLが書ければすぐ習得できるテンプレートエンジン「EJS」の基本的な書き方
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
Vue.jsでtemplateタグ内にscriptやstyleタグを生成する方法|Tags with side effect are ignored
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法