はじめに
開発をしている中で、「あ、これ知らなかったな」ということに遭遇することがあります。
今回はその一つについて、備忘録も兼ねてアウトプットとしてまとめておきます。
.env が使えない
よし、ポート番号は .env に入れて...
PORT=4000
それを取得するようにして...
(適当な記事を チラ見して )
const PUBLIC_PORT = Number(process.env.PORT || 8080);
...
publicServer.listen(PUBLIC_PORT, () => {
console.log(`Public site at http://localhost:${PUBLIC_PORT}`);
});
できた!実行だ!
$ npm start
> server_test@0.1.0 start
> node server.js
Public site at http://localhost:8080
あれ?デフォルト値になってしまっている?
原因
調べてみたら、 Node.js は .env ファイルを自動では読み込まないそうです。
JavaScript だから、というわけではなく、他の言語でもそうらしいです。
これまで人のコードを改造したり、そのまま使うことが多かったため、「環境変数は勝手に読み込まれるもの」と思い込んでいました。
今まではハードで最初に直書きするという酷いコードでしたから...
基礎を怠るとこんな場所で影響するとは...
解決
ということで、 Node.js では dotenv を使って読み込みましょう。
dotenv をインストールして、先ほどのコードを以下のように変えます。
npm install dotenv
#!/usr/bin/env node
import 'dotenv/config';
const PUBLIC_PORT = Number(process.env.PORT || 8080);
publicServer.listen(PUBLIC_PORT, () => {
console.log(`Public site at http://localhost:${PUBLIC_PORT}`);
});
結果として上手く動くようになります。
$ npm start
> server_test@0.1.0 start
> node server.js
Public site at http://localhost:4000
まとめ (学んだこと)
.env は自動で読み込まれない。
読み込むやつ(dotenv、dotenvx、python-dotenv等)を導入してから使用する。
基礎を怠らない。
記事は最初から最後まで真面目に読む。