問題
Environment Variables
ここで説明されている.env
の指定方法が不明瞭。どういう設定で、クライアント側(ブラウザ)で使えるのか、使えないのか、ぱっと見よく分からない。
対応表
.env.development | .env.production | .env.* | |
---|---|---|---|
client side | 設定の変数が使える | 設定の変数が使える | GATSBY_ prefixがあれば使える |
server side | 設定の変数が使える | 設定の変数が使える | 設定の変数が使える |
.env.development | .env.production | .env.* | |
---|---|---|---|
gatsby develop |
自動的に読み込まれる | dotenvで各自が読み込む設定が要る | |
gatsby build |
自動的に読み込まれる | dotenvで各自が読み込む設定が要る |
例
- 別々の条件がある2つのサイトを1つのgatsbyで作る必要がある。
- 2つのサイトに共通する変数がある
- サイトそれぞれに固有の変数がある
BASIC_VAR=両方のサイトに必要な何らかの基本的な変数
ONLY_AVAILABLE_ON_SERVER=prefixが無いのでこの変数はserver側でのみ有効
GATSBY_GOOGLE_ANALYTICS_ID=42424242
GATSBY_NAME=サイト名A
GATSBY_GOOGLE_ANALYTICS_ID=11111111
GATSBY_NAME=サイト名B
.env.*
が読み込まれるようにgatsby-config.js
の頭に下のようなdotenv
読み込みコードを入れる。
// https://www.gatsbyjs.org/docs/environment-variables/
let activeEnv = process.env.ACTIVE_ENV || process.env.NODE_ENV || "development"
require("dotenv").config({
path: `.env.${activeEnv}`
})
package.json
のscripts
を下のようなものに変える。
{
"scripts": {
"site-a.build": "ACTIVE_ENV=site-a gatsby build",
"site-b.build": "ACTIVE_ENV=site-b gatsby build",
"site-a.develop": "ACTIVE_ENV=site-a gatsby develop",
"site-b.develop": "ACTIVE_ENV=site-b gatsby develop",
}
}
gatsby build
=> .env.production
を自動的に読み込む
gatsby develop
=> .env.development
を自動的に読み込む
ACTIVE_ENV
=> .env.???
を読み込む
結果
yarn site-a.develop
を打てば、.env.development
と.env.site-a
を読み込む。
||BASIC_VAR|ONLY_AVAILABLE_ON_SERVER|GATSBY_GOOGLE_ANALYTICS_ID|GATSBY_NAME|
|---|---|---|---|---|---|
|from|.env.development|.env.site-a|.env.site-a|.env.site-a|
|server side|有効|有効|有効|有効|
|client side|有効||有効|有効|