env プロパティ
クライアントサイドとサーバーサイドでる環境変数を共有できます。
-
型:
Object
Nuxt ではクライアントサイドとサーバーサイドで共有される環境変数を作成できます。
env プロパティはクライアントサイドで使用できる環境変数を定義します。これらはサーバーサイド環境変数や dotenv モジュール などを使用して割り当てることができます。
env
プロパティをRuntime config プロパティ の publicRuntimeOptions
と privateRuntimeOptions
で代替することが推奨されます。
詳細は、チュートリアルの Moving from @nuxtjs/dotenv to runtime config (/tutorials/moving-from-nuxtjs-dotenv-to-runtime-config/)をご覧ください。
より良いトラブルシューティングのために、後述の process.env
と process.env == {}
を必ず読んでください。
export default {
env: {
baseUrl: process.env.BASE_URL || 'http://localhost:3000'
}
}
これによりサーバーサイドの環境変数 BASE_URL
が利用可能または定義されていれば、BASE_URL
と等しい baseUrl プロパティを作成できます。
もし BASE_URL
が利用不可であったり定義されていなれば、クライアントサイドの baseUrl
は 'http://localhost:3000'
になります。サーバーサイドの環境変数 BASE_URL は nuxt.config.js
の env
プロパティを経由してクライアントサイドにコピーされます。または、他の値が定義されています。
そして baseUrl
変数にアクセスするには 2 つの方法があります:
-
process.env.baseUrl
経由でアクセスする。 -
context.env.baseUrl
経由でアクセスする。詳細は context API を参照してください。
例えば env
プロパティを使って公開トークンを付与できます。
上記の例として、env プロパティを使って axios を設定できます。
import axios from 'axios'
export default axios.create({
baseURL: process.env.baseUrl
})
このように記述するとページ内で import axios from '~/plugins/axios'
という具合に axios をインポートできます。
環境変数の自動注入
ビルドフェーズで NUXT_ENV_
で始まる環境変数を定義(例えば NUXT_ENV_COOL_WORD=freezing nuxt build
または Windows の console に対して SET NUXT_ENV_COOL_WORD=freezing & nuxt build
)した場合、この環境変数はプロセス環境に自動的に注入されます。nuxt.config.js
内に定義した同名変数よりも優先されるので注意してください。
process.env == {}
Nuxt は webpack の definePlugin
を用いて環境変数を定義することに注意してください。つまり、Node.js の実際の process
または process.env
が利用可能でもなければ定義されてもいないことを意味します。nuxt.config.js で定義された env
プロパティは process.env.xxxx
へそれぞれ個別にマップされコンパイル時に変換されます。
つまり、console.log(process.env)
は {}
を出力しますが、console.log(process.env.your_var)
は定義された値を出力します。コードが webpack でコンパイルされると、process.env.your_var
と記述されたすべての箇所が定義した値に置き換えられます。例えば、env.test = 'testing123'
と定義すると、コード中に process.env.test
と記述してある箇所がすべて 'testing123' へ置き換えられます。
前
if (process.env.test == 'testing123')
後
if ('testing123' == 'testing123')
serverMiddleware
serverMiddleware はメインの Nuxt ビルドから分離されているので、nuxt.config.js
に定義された env
変数は使用できません。