最新バージョン 20.6.0では、Node.js にファイルのサポートが組み込まれています.env
。完全に依存関係なしに、.env
ファイルから Node.js アプリケーションに環境変数を読み込むことができるようになりました。process.env
ファイルのロードが.env
非常に簡単になりました。
node --env-file .env
.envとは何ですか?
.env
ファイルは、実行中のアプリケーションに存在する環境変数を構成するために使用されます。このアイデアは、デプロイメント (開発、ステージング、運用など) 間で異なる可能性があるすべてのものを環境に保存するという12要素アプリケーション アプローチから来ています。
構成はアプリケーション コードの一部であってはならず、バージョン管理にチェックインされるべきでもありません。API 資格情報やその他のシークレットのようなものは、個別に保存し、それらを必要とする環境にロードする必要があります。ファイルを使用すると、.env
環境内で変数を設定することが現実的でないアプリケーション (開発マシンや CI など) の構成を管理できます。
.env
ファイルを使用して環境に変数を読み込むことをサポートするライブラリがさまざまな言語で存在しており、それらは「dotenv」と呼ばれることが多く、 Node.js dotenvも例外ではありません。しかし現在、Node.js はこの動作をネイティブにサポートしています。
Node.js で .env を使用するにはどうすればよいですか?
ファイルは.env
次のようになります。
PASSWORD=supersecret
API_KEY=84de8263ccad4d3dabba0754e3c68b7a
# .env files can have comments too
慣例により、これを.env
プロジェクトのルートに保持しますが、任意の名前を付けることができます。
--env-file
その後、Node.js を起動し、フラグをファイルに指定することで、ファイル内の変数を環境変数として設定できます.env
。ロード時に、変数を属性として使用できますprocess.env
。
$ node --env-file .env
Welcome to Node.js v20.6.0.
Type ".help" for more information.
> console.log(process.env.PASSWORD)
supersecret
undefined
> console.log(process.env.API_KEY)
84de8263ccad4d3dabba0754e3c68b7a
undefined
サポートされている機能
現在のサポートはdotenvに比べてかなり基本的です。例えば:
- 現在、複数行の値は使用できません
- 変数展開は使用できません
- 一度に指定できるファイルは 1 つだけです。Node.js は渡された最後のフラグのみを使用するため、次の例では from
.env.development
変数のみが使用されます。
node --env-file .env --env-file .env.development
やるべきことはまだたくさんあり、これらの機能のいくつかが追加される可能性があります。ここで GitHub のディスカッションをフォローできます。
欠点がある
バージョン 20.6.0 の時点で、ドキュメントには「同じ変数が環境とファイルで定義されている場合、環境の値が優先されます。これがすべての dotenv パッケージのデフォルトの動作方法です。ただし、これは当てはまりません」と記載されています。 Node.js の現在の実装では、ファイル内の変数が.env
環境をオーバーライドするため、この問題を修正するためのPR リクエストがあります。
Node.js実装のメリット
この実装にはいくつかの機能が欠けていますが、サードパーティのパッケージを使用する場合に比べていくつかの利点があります。Node.js は起動時にファイルをロードして解析するため、 Node 自体を構成する環境変数を.env
含めることができます。NODE_OPTIONS
.env
したがって、次のようなファイルを作成できます。
NODE_OPTIONS="--no-warnings --inspect=127.0.0.1:9229"
その後node --env-file=.env
、それを実行すると、警告なしでプロセスが実行され、127.0.0.1:9229
IP アドレスのチェッカーがアクティブになります。
注: を入力することはできません
NODE_OPTIONS="--env-file .env"
。無限ループを避けてください。
C++ ガベージ コレクション ライブラリ Oilpan
さらに、Node.js C++ 拡張スイートは、V8 の C++ ガベージ コレクション ライブラリである Oilpan をサポートするようになり、C++ と JavaScript の間でオブジェクトとリソースをより適切に統合および管理するための新しいツールとガイダンスを開発者に提供します。つまり、20.6 以降、Node.js には斬新で効率的な C++ メモリ管理メソッドが追加されていますが、元のメソッドも引き続き使用できます。
V8 チームは 2021 年に Oilpan をリリースしましたが、その特徴は、オブジェクトをマークすることで生きているオブジェクトを識別し、リサイクル段階で死んだオブジェクトをリサイクルできる追跡ガベージ コレクション メカニズムを提供することです。Oilpan は、特定のオブジェクトのヒープの断片化もサポートしています。全体として、Oilpan はプログラム開発モデルを簡素化し、メモリ リークと使用後のリリースの問題の解決に役立ちます。
Node.js アプリケーション用の C++ 拡張キットを作成する開発者は Oilpan を使用することもできますが、公式の注意事項として、Node.js は V8 の Oilpan 関数ライブラリのみをパッケージ化しており、ABI (アプリケーション バイナリ インターフェイス) の安定性は保証できません。オイルパンは長年にわたってクロムでテストされてきたため、ABI を破る可能性は低いと考えられています。その後、オイルパンが外部および内部で十分な採用を獲得した場合、当局はそれをABIの安定性保証に含めることを検討する予定です。
Node.js 20.6 では、モジュール システムに新しい API も追加され、開発者がファイルを指定してモジュール フックをカスタマイズするための新しいメソッドが提供されます。この新しい機能は、開発者がモジュールの読み込みと解析の動作をカスタマイズし、メイン アプリケーション実行スレッドとカスタム フック実行スレッド間の通信チャネル。
Node.js は常に改善されています
Node.js バージョン 20.6.0 を試してみてください。バージョン 20 では、安定したテスト ランナー、シミュレーション タイマー、ファイル サポートなどの新機能のほか、.env
その他多くのアップグレード、修正、改善が行われています。10 月にバージョン 20 が Node.js のアクティブな LTS バージョンになるため、今がこれらの新機能をテストし、アプリケーションをアップグレードして活用することを検討し始めるのに良い時期です。