Next.js は、環境変数の処理に関して悪名高く批判されています。長年にわたって改良されてきましたが、依然としていくつかの癖があり、特に process.env オブジェクトを通じて公開されるパブリック変数に関しては混乱を招く可能性があります。
NEXT_PUBLIC_ 接頭辞の付いた変数はすべてクライアント側でアクセスできますが、公式ドキュメントで述べられているように、これらはビルド時にのみ使用できるため、Docker で使用する場合は実行時に変更できません。
この問題については以前にも取り上げましたが、実行時に変更できるグローバル共有変数を使用する、検討すると興味深いかもしれない別のアプローチを見つけました。
ポリフィルのセットアップ
グローバル変数は Next.js で部分的にサポートされていますが、ポリフィルを使用して、注入された小さなスクリプトで使用できるようにすることができます。
// app/layout.tsx <script dangerouslysetinnerhtml="{{" __html: e t.prototype._t_ globalthis></script>
元のコードは GitHub のこのコメントから抜粋されたもので、基本的にクライアントとサーバー間で変数を共有するために使用できるグローバルな globalThis オブジェクトを作成します。ポリフィルは Next.js 14.x に付属していますが、一部のブラウザでは globalThis オブジェクトが壊れるようです。そのため、__html プロパティを使用してコードをページに直接挿入しています。
Zod を使用した変数の検証
次に、Zod を使用して実行時に変数を検証し、変数が有効でない場合はエラーをスローします。このステップは、変数が常に利用可能で有効であることを保証し、実行時エラーを回避したり、アプリケーションがセキュリティ上の問題にさらされることを避けるために非常に重要です。
npm install zod
次に、process.env から変数を取得し、期待される型に安全にキャストするためのいくつかのユーティリティ関数を含む variables.ts ファイルを作成します。
// lib/env.ts import { z } from 'zod'; // Load the variables export const load = () => { return process.env; }; // Parse or throw the variables export function parseOrThrow(schema: z.Schema, data: unknown, error: Error) { const parsed = schema.safeParse(data); // Log the errror if (parsed.success) return parsed.data; console.error(parsed.error); throw error; } // Some zod helpers to use export const port = z .string() .refine( (port) => parseInt(port) > 0 && parseInt(port) <p>load は process.env オブジェクトを返す単純な関数ですが、parseOrThrow は Zod スキーマを使用して変数を解析し、変数が有効でない場合にエラーをスローするユーティリティ関数です。</p> <p>最後に、変数スキーマと、変数をロードして解析するためのユーティリティ関数を含む variables.ts ファイルを作成できます。<br> </p> <pre class="brush:php;toolbar:false">// lib/vars.ts import { z } from 'zod'; import { load, parseOrThrow } from './env'; import { parseOrThrow, load, str, num, bool, port } from './env'; // Define the variables schema const schema = z.object({ PUBLIC_VARIABLE: str.optional(), PUBLIC_MY_NUM: num, PUBLIC_BOOL: bool, PUBLIC_PORT: port, }); export const loadEnv = () => { const env = load(); const parsed = parseOrThrow(schema, env, new Error('Invalid variables')); for (const key of Object.keys(parsed)) { if (!globalThis[key]) { globalThis[key] = parsed[key]; } } };
変数の使用
変数を使用するには、まず変数をロードする必要があります。 app/layout.tsx ファイルまたはその他のレイアウト ファイルでこれを実行し、クライアントとサーバーの両方でアプリケーションの残りの部分にそれらを徐々に公開できます。
// app/layout.tsx import { loadEnv } from '@/lib/vars'; loadEnv(); export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( {children} ); }
参考文献
- Next.js 環境変数
- Next.js GitHub ディスカッション
以上がNext.js パブリック変数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps、whilejavascriptisforinteractivewebpages.1)javaiscompiled、staticatically、andrunsonjvm.2)javascriptisisterted、dynamsornoded.3)

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい
