LoginSignup
1
0

More than 1 year has passed since last update.

Amplify-js+Viteでエラーになった件

Last updated at Posted at 2023-05-05

amplify-jsでCognitoの認証を実装する際に困ったことと解決方法を残しておきます。
同じところで詰まってる方がいたら参考にどうぞ。

global is not definedが発生する

発生した事象

amplify-jsをimportしたコンポーネントをレンダリングすると真っ白の画面になると思います。ブラウザの開発者ツールのコンソールには"global is not defined"と表示されています。
20230505_01.png

解決法

"global is not defined"はglobalが定義されていませんという意味です。
globalはnode.jsで使用されるグローバルオブジェクトであり、JavaScriptではwindowを指します。

Viteを使用している場合は、vite.config.jsに以下の記述を追加してください。

vite.config.js
export default defineConfig({
  // 省略
  define: {
    global: 'window',
  },
})

amplify-jsはnode.jsでも利用される万能なパッケージなので、この辺はViteに限らずjsならどの環境でも発生するんじゃないかと思います。
(ちなみに、amazon-cognito-identity-jsでもCognitoの認証処理は実装可能です。ただ、amplify-jsによってラップされているので、amazon-cognito-identity-jsをわざわざ使わなくてもよいですね)

"request" is not exported by "__vite-browser-external"が発生する

発生した事象

buildすると次のエラーが発生します。

"request" is not exported by "__vite-browser-external", imported by "node_modules/@aws-sdk/credential-provider-imds/dist/es/remoteProvider/httpRequest.js"

20230505_02.png

解決法

こちらもamplify-jsがnode.js固有の機能を使っていることに起因するものですね。"http"パッケージがインストールされていないという意味のようです。

Viteを使用している場合は、vite.config.jsに以下の記述を追加してください。

vite.config.js
export default defineConfig({
  // 省略
  resolve: {
    alias: {
      "./runtimeConfig": "./runtimeConfig.browser",
    },
  },
})

補足事項

amplify-jsの利用にあたり、「Amplifyを使用していないのにamplify-jsって使えるのか?」という疑問がありましたが、Amplifyを使用していなくてもamplify-jsでCognitoの認証は可能でした。

上記のエラーは、React、Vue.jsに限らず同じ解決法で解決できると思います。

1
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
1
0