0
0

More than 1 year has passed since last update.

Nuxt+Amplifyで"global is not defined"が発生する場合の対処法

Posted at

まずは対処法

nuxt.config.tsにこちらの設定を追加してください。

nuxt.config.ts
export default defineNuxtConfig({
  // ...,
  vite: {
    define: {
      "window.global": {},
    },
  },
});

これにてエラーが解消されるはずです。ここまで読んでくださりありがとうございました!

・・・以下は全ておまけです。

どうしてエラーが発生するのか

原因はaws-amplifyの依存モジュールbufferにあるこちらの処理です。

Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
  ? global.TYPED_ARRAY_SUPPORT
  : typedArraySupport()

Nuxtでviteを使用している場合、npm run dev等で開発サーバーを起動すると、node_modulesはバンドルされずにそのまま使われるようです。
それにもかかわらず、ブラウザでは未定義のglobalを使おうとするためglobal is not definedとなってしまいます。

OSSコミュニティに直接聞いてみた

エラーの原因となっているbufferモジュールのこのバグは、最新バージョンでは解消されています。しかし、aws-amplifyの依存モジュールamazon-cognito-identity-jsでは、古いバージョンの4.9.2を使い続けていました。こちらをバージョンアップするためのPRをリポジトリで見つけたのですが、マージされずに放置されていたので質問してみました。

回答がこちら。

this issue will cause some breaking changes, and it will be fixed as part of our next major version bump of our library. We do not have an exact ETA, but we will provide an update when we do!

どうやら、次のメジャーバージョンのリリースで解消されるようです。(予定は未定)

結論

とりあえずは、viteの設定にてglobalを空のオブジェクトとして定義することでエラーを解消することができます。
いずれは、amazon-cognito-identity-jsのアップデートでその設定が不要になるはずです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0