@now/next
ではbuild.env
、それ以外ではenv
でマシンの環境変数を渡すことができます。
{
"env": {
"FOO": "BAR"
},
"build": {
"env": {
"FOO": "BAR"
}
}
}
隠したい値にはシークレット変数を設定する
「何とかkey」や「何とかtoken」のようにあまり見られたくない値があると思います。その場合はまずシークレット変数として、 now に登録してそれを使うようにします。これの登録にはnow secret
コマンドを使います。
以下はtoken
にxxxxxx
という値を登録する例です。
now secret add token xxxxxx
登録が終わったら先程のenv
設定で頭に@
を付けて指定してあげるだけです。
{
"env": {
"TOKEN": "@token"
},
"build": {
"env": {
"TOKEN": "@token"
}
}
}
環境変数が登録されたか確認する方法
そういうログを吐いて、それをnow logs
コマンドから見てチェックします。now logs <url> -n 500
(500行)とすれば確実に見れると思います。
@now/node
これは中でconsole.log(process.env)
とすればログを吐いてくれるので、適当にアクセスしたあとにnow logs
でその部分をチェックします。
@now/next
@now/next
を使ったデプロイでは、デプロイフローの中でyarn now-build
が呼ばれています。なので、これにフックする形で吐かせるといいと思います。(頭にpre
を付ける)
printenv
はマシンに設定されている環境変数をすべて表示するコマンドです。
{
"scripts": {
"prenow-build": "printenv"
}
}
NextJS の中で環境変数が見れるようにする
まだマシンに環境変数を設定しただけで NextJS の中では見ることができません。これにはnext.config.js
の Webpack の設定でwebpack.EnvironmentPlugin
などを使って定義します。
先に Webpack をインストールだけしておきます。
yarn add -D webpack
そして、こんな感じでnext.config.js
の Webpack 設定に手を入れます。
module.exports = {
webpack: config => {
/* ...色々 */
const webpack = require('webpack');
config.plugins.push(
new webpack.EnvironmentPlugin({
TOKEN: 'default value'
})
);
}
}
これでコードの中のprocess.env.TOKEN
で値が取得できるようになるはずです。