🐸
Nuxtでdotenvとcross-envを使って環境ごとに環境変数を切り替える
Nuxtを使っていて環境ごとにそっくり環境変数を切り替えたい場合はよくあると思います。開発環境と本番環境で分けたりとか。そうした場合にどうするのがいいのかなーと調べてみた結果をまとめました。
概要
大まかな方法としては以下になります。
- dotenvで
.env_xxx
ファイルで環境変数を管理できるようにする - cross-envで
env_xxx
を切り替えられるようにする
環境
- Nuxt 2.14.12
- @nuxtjs/dotenv 1.4.1
- cross-env 7.0.3
dotenvの導入
$ yarn add @nuxtjs/dotenv
.env
ファイルを用意する
環境ごとのプロジェクトのルート直下に.env
ファイルを環境ごとに作成します。
※あとでパス指定すればいいので.env
ファイルの名前や場所は任意です。ここではよくある.env_xxx
といったファイル名を採用しています。
your_project
├── .env_local
├── .env_dev
└── .env_prod
nuxt.config.js
にdotenv
用の設定を追記する
nuxt.config.js
のmodules
にdotenv
の設定を追記します。
process.env.NODE_ENV
の値に応じて取得する.env
が変わるようにしています。
nuxt.config.js
// 省略
modules: [
// 省略
// NODE_ENVに応じた.envファイルを取得します。
['@nuxtjs/dotenv',
{ filename: `.env_${process.env.NODE_ENV}` }]
],
// 省略
env: {
// これを設定しないとNuxtでprocess.env.NODE_ENVを取得したときにデフォルトの値になってしまう
NODE_ENV: process.env.NODE_ENV
}
cross-envの導入
$ yarn add cross-env
package.json
のnpm scripts
を修正する
yarn dev
で動かした場合はNODE_ENV
の値がdev
になるように設定します。本番環境用にyarn build
, yarn start
した場合はデフォルトでproduction
が設定されます。
package.json
"scripts": {
"local": "cross-env NODE_ENV=local nuxt",
"dev": "cross-env NODE_ENV=dev nuxt",
"build": "nuxt build",
"start": "nuxt start"
}
Discussion