Viteで.envの内容が取得できない時に確認したこと
.env の内容がアプリ内から import.meta.env.{名称} で取得できないとき。
.env上で、アプリ内から参照したい値の名称はVITE_で始まっていること。.envのファイル名が.env.[mode]である場合、オプション--mode [mode]を指定してviteを実行していること。vite.config.jsでrootを指定している場合、その直下に.envファイルを置いていること。または.envがあるディレクトリをenvDirを指定していること。
vite 4.1.0
詳細
バックエンドAPIのURLをファイル .env.development に書いてました。
VITE_API_URL=http://localhost:3000/ファイル .env.[mode] に書かれていて名称のプレフィックスが VITE_ である値は、オプション --mode [mode] でモード指定して vite を実行した場合に、アプリ内から import.meta.env.{名称} で利用できるはずです。
(ファイル .env の場合も、モードを問わないだけで同じです。)
なのでこの場合、以下の通りになるはずです。
npx vite --mode developmentconsole.log(import.meta.env.VITE_API_URL);
// -> http://localhost:3000/が、実際にはなぜか import.meta.env.VITE_API_URL が undefined でした。import.meta.env の内容を確認してもビルトインの変数しかセットされてませんでした。
それで改めて確認したところ、.env はViteのルートディレクトリの直下に置く必要があったようでした。
今回、私は .env.development をプロジェクト直下に置いていましたが、実際にはViteのルートディレクトリを vite.config.js の root 属性で変更していたので、プロジェクト直下とViteのルートディレクトリがずれてしまっていました。
なので私は .env.development をViteのルートディレクトリ直下に移動させるか、または vite.config.js に envDir 属性を追加することで .env の場所を教えてやる必要がありました。
/
+-- src/
| +-- main.tsx
| +-- index.html
| +-- vite-env.d.ts
| +-- ...
|
+-- .env
+-- .env.development
+-- vite.config.tsimport { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
root: 'src',
envDir: '../', // これを追加
build: {
outDir: '../dist',
}
});以上。
キリウ君が読まないノート