令服务器端运行时可以访问环境变量 - AWS Amplify 托管

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

令服务器端运行时可以访问环境变量

Amplify Hosting 支持在 Amplify 控制台的项目配置中设置环境变量,从而为应用程序的构建添加环境变量。但是,默认情况下,Next.js 服务器组件无权访问这些环境变量。此行为意在保护您的应用程序在构建阶段使用的环境变量所存储的任何密钥。

要使 Next.js 可以访问特定的环境变量,您可以修改 Amplify 构建规范文件,在 Next.js 可识别的环境文件中设置环境变量。这样 Amplify 就能够在构建应用程序之前加载这些环境变量。以下构建规范示例演示了如何在构建命令部分中添加环境变量。

version: 1 frontend: phases: preBuild: commands: - npm ci build: commands: - env | grep -e DB_HOST -e DB_USER -e DB_PASS >> .env.production - env | grep -e NEXT_PUBLIC_ >> .env.production - npm run build artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/* - .next/cache/**/*

在此示例中,构建命令部分包含两个在应用程序的构建运行之前将环境变量写入 .env.production 文件的命令。Amplify Hosting 允许您的应用程序在接收流量时访问这些变量。

上例中,构建命令部分的下一行演示了如何从构建环境中获取特定变量,并将其添加到 .env.production 文件中。

- env | grep -e DB_HOST -e DB_USER -e DB_PASS >> .env.production

如果您的构建环境中存在这些变量,则 .env.production 文件将包含以下环境变量。

DB_HOST=localhost DB_USER=myuser DB_PASS=mypassword

上例中,构建命令部分的下一行演示了如何向 .env.production 文件中添加带有特定前缀的环境变量。此示例中添加的变量都带有前缀 NEXT_PUBLIC_

- env | grep -e NEXT_PUBLIC_ >> .env.production

如果构建环境中存在多个带有 NEXT_PUBLIC_ 前缀的变量,则 .env.production 文件将如下所示。

NEXT_PUBLIC_ANALYTICS_ID=abcdefghijk NEXT_PUBLIC_GRAPHQL_ENDPOINT=uowelalsmlsadf NEXT_PUBLIC_SEARCH_KEY=asdfiojslf NEXT_PUBLIC_SEARCH_ENDPOINT=https://search-url

SSRmonorepos 的环境变量

如果您要在 monorepo 中部署SSR应用程序并希望让 Next.js 可以访问特定的环境变量,则必须在.env.production文件前面加上应用程序根目录。以下适用于 Next.js 的构建规范示例位于一个 Nx monorepo 中,演示了如何在构建命令部分中添加环境变量。

version: 1 applications: - frontend: phases: preBuild: commands: - npm ci build: commands: - env | grep -e DB_HOST -e DB_USER -e DB_PASS >> apps/app/.env.production - env | grep -e NEXT_PUBLIC_ >> apps/app/.env.production - npx nx build app artifacts: baseDirectory: dist/apps/app/.next files: - '**/*' cache: paths: - node_modules/**/* buildPath: / appRoot: apps/app

上例中,构建命令部分的后续行演示了如何从构建环境中获取特定变量,并针对应用程序根目录为 apps/app 的 monorepo 中的应用程序将其添加到 .env.production 文件中。

- env | grep -e DB_HOST -e DB_USER -e DB_PASS >> apps/app/.env.production - env | grep -e NEXT_PUBLIC_ >> apps/app/.env.production