1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vite+React環境で、Jestのテスト内でimport.meta.envを読めるようにする | SyntaxError: Cannot use 'import.meta' outside a module

Last updated at Posted at 2025-12-31

はじめに

Viteで作成したReactアプリにJestを導入し、テストを書いて実行したところ
SyntaxError: Cannot use 'import.meta' outside a moduleというエラーで落ちてしまいました。
いくつか記事を調べてみたところ、Vite環境内でもimport.meta.envではなくprocess.envの書き方で環境変数にアクセスするように設定するという方法が主流でした。
しかし、できるだけアプリ側はViteが提供している標準的な記法のままでJestを実行できないか調べていたところ、便利な方法があったため以下記載します。

結論

babel-preset-viteを導入する。

使用方法

公式のREADME通り、以下の手順でインストール・babelの設定を行えばJest内でもimport.meta.envが読み込めるようになります。

インストール

npm install --save-dev babel-preset-vite

babel設定

.babelrcまたはbabel.config.jsで以下のように設定します。

{
  "presets": ["babel-preset-vite"]
}

Jest内でmeta.envだけ読み込めればよく、同じくVite環境でのみ生成されるmeta.globやmeta.hotは読み込まないように設定したい場合は以下のようなオプション設定も可能です。

{
  "presets": [
    [
      "babel-preset-vite",
      {
        "env": true, // defaults to true
        "glob": false, // defaults to true
        "hot": false // defaults to true
      }
    ]
  ]
}

原因

Viteで作成されたReact環境ではECMAScriptの記法が採用されている一方で、JestではCommonJSを前提としています。
これはbabel-jestなどのパッケージを導入することで、ECMAScriptのコードを問題なくJest上でテストすることが可能になりますが、今回問題となったimport.meta.envに関してはJavaScript標準のimport.metaオブジェクト内には存在しておらず、Viteが独自に提供しているプロパティであるようです。

パッケージの導入方法で少し触れていますが、import.meta.env以外にもViteが独自に提供しているプロパティとしてはglob, hotなどがあるようです。
それらをコード内で使用していた場合も、このパッケージを導入することでJestでエラーが出ないようになります。

参考記事

参考記事:

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?