nuxtでdotenv-module利用時にCircleCIで環境変数を指定する

公開日時
更新日時

nuxt-community/dotenv-moduleを利用して、ローカルでは.envに環境変数を指定して利用していた。

CircleCI上のGUIから環境変数を設定して、CircleCIからFirebaseHostingにデプロイしたところ環境変数が設定されていないとエラーが出てしまった。

そこで対応方法を調べてみたところ以下の2通りの方法があった。

方法1:CI実行時に.envを作成する

[[.circleci/config.yml]]に以下を追加してbuild前に.envを生成すると環境変数が設定された。

- run:
    name: Add env
    command: |
      echo "BASE_URL=$BASE_URL" > .env
      echo "FIREBASE_APIKEY=$FIREBASE_APIKEY" >> .env
      echo "FIREBASE_AUTH_DOMAIN=$FIREBASE_AUTH_DOMAIN" >> .env
      echo "FIREBASE_DATABASE_URL=$FIREBASE_DATABASE_URL" >> .env
      echo "FIREBASE_PROJECT_ID=$FIREBASE_PROJECT_ID" >> .env
      echo "FIREBASE_STORAGE_BUCKET=$FIREBASE_STORAGE_BUCKET" >> .env
      echo "FIREBASE_MESSAGING_SENDER_ID=$FIREBASE_MESSAGING_SENDER_ID" >> .env
      echo "FIREBASE_APP_ID=$FIREBASE_APP_ID" >> .env
      echo "FIREBASE_MEASUREMENT_ID=$FIREBASE_MEASUREMENT_ID" >> .env
- run: yarn build

方法2:nuxt.config.tsのenvを設定する

[[nuxt.config.ts]]のenvで環境変数を再設定するとCircleCI上の環境変数を認識してくれた。

export default {
  env: {
    BASE_URL: process.env.BASE_URL,
    FIREBASE_APIKEY: process.env.FIREBASE_APIKEY,
    FIREBASE_AUTH_DOMAIN: process.env.FIREBASE_AUTH_DOMAIN,
    FIREBASE_DATABASE_URL: process.env.FIREBASE_DATABASE_URL,
    FIREBASE_PROJECT_ID: process.env.FIREBASE_PROJECT_ID,
    FIREBASE_STORAGE_BUCKET: process.env.FIREBASE_STORAGE_BUCKET,
    FIREBASE_MESSAGING_SENDER_ID: process.env.FIREBASE_MESSAGING_SENDER_ID,
    FIREBASE_APP_ID: process.env.FIREBASE_APP_ID,
    FIREBASE_MEASUREMENT_ID: process.env.FIREBASE_MEASUREMENT_ID
  }
}

[[nuxt.config.ts]]の方が変更頻度が高いので方法2のやり方で対応した。

参考


Related #nuxt.js

dockerコンテナ上のnuxt.jsアプリでhot reloadを有効にする

watcherの設定をpollingに変更する

create nuxt-appで作成したアプリでTapable.plugin is deprecatedが出る場合の対処法

yarn add @nuxtjs/pwa@v3.0.0-beta.16でPWA Moduleを更新する

Nuxt.jsのservice workerで環境変数を切り替えられるようにする

設定情報をハードコードしたくなかったので、ビルド時にnodeコマンドでファイル生成を行い環境変数を切り替えられるように対応した。

NuxtアプリをGAEにデプロイする(Node.js 10)

GAEへのデプロイの際にいくつかエラーが出てハマったので対応内容をまとめておく

Nuxt.jsのserverMiddlewareがGAE上だとエラーになる

ディレクトリ位置の問題でserverMiddlewareが動かない現象が発生した