Azure WebApps React:当我调用 process.env 时,环境变量存在但不存在

IT技术 node.js reactjs azure-web-app-service
2021-05-22 23:01:09

先决条件

这是我第一次使用 React/Node.JS/Azure App Service。我通常使用 Flask/jinja2/gunicorn 部署应用程序。

用例

我想使用存储在Azure 上的应用服务配置的环境变量

不幸的是,环境变量显示 3 个环境变量(NODE_END、PUBLIC_URL 和 FAST_REFRESH)而不是几十个

Azure 应用服务appsettings的部分内容

[
{
    "name": "REACT_APP_APIKEY",
    "value": "some key",
    "slotSetting": false
  },
  {
    "name": "REACT_APP_APPID",
    "value": "an app id",
    "slotSetting": false
  },
  {
    "name": "REACT_APP_AUTHDOMAIN",
    "value": "an auth domain",
    "slotSetting": false
  },
{
    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
    "value": "something",
    "slotSetting": false
  },
  {
    "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
    "value": "something else",
    "slotSetting": false
  },
  {
    "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
    "value": "some alphanumeric value",
    "slotSetting": false
  },
  {
    "name": "KUDU_EXTENSION_VERSION",
    "value": "78.11002.3584",
    "slotSetting": false
  }
]

Azure Web App 上的环境变量

CI/CD 流程

  1. 我正在使用 Azure DevOps 在 Azure 上构建和部署应用程序。
  2. 该工艺运行npm installnpm run build生成包含生成的压缩文件之前(见目录树列表这里下文)

如何运行应用程序?

启动命令中包含npx serve -l 8080 .

Azure Web 应用服务 - 配置 > 常规设置

问题

我显示环境变量

console.log('process.env', process.env);

的内容process.env

{
  "NODE_ENV": "production",
  "PUBLIC_URL": "",
  "FAST_REFRESH": true
}

有线部分

我在 Azure 上使用 SSH 并运行

printenv | grep APPINS 结果是

APPSETTING_APPINSIGHTS_INSTRUMENTATIONKEY=something
APPINSIGHTS_INSTRUMENTATIONKEY=something

printenv | grep APPLICATION 结果是

APPSETTING_APPLICATIONINSIGHTS_CONNECTION_STRING=something else
APPLICATIONINSIGHTS_CONNECTION_STRING=something else

杂项

目录树列表

.
├── asset-manifest.json
├── favicon.ico
├── images
│   ├── app
│   │   └── home_page-ott-overthetop-platform.png
│   ├── films
│   │   ├── children
│   │   │   ├── despicable-me
│   │   │   │   ├── large.jpg
│   │   │   │   └── small.jpg
│   ├── icons
│   │   ├── add.png
│   ├── misc
│   │   ├── home-bg.jpg
│   ├── series
│   │   ├── children
│   │   │   ├── arthur
│   │   │   │   ├── large.jpg
│   │   │   │   └── small.jpg
│   └── users
│       ├── 1.png
├── index.html
├── static
│   ├── css
│   │   ├── 2.679831fc.chunk.css
│   │   └── 2.679831fc.chunk.css.map
│   ├── js
│   │   ├── 2.60c35184.chunk.js
│   │   ├── 2.60c35184.chunk.js.LICENSE.txt
│   │   ├── 2.60c35184.chunk.js.map
│   │   ├── main.80f5c16d.chunk.js
│   │   ├── main.80f5c16d.chunk.js.map
│   │   ├── runtime-main.917a28e7.js
│   │   └── runtime-main.917a28e7.js.map
│   └── media
│       └── logo.623fc416.svg
└── videos
    └── bunny.mp4

74 directories, 148 files

1个回答

当您在本地运行应用程序时,您可以使用.envfile 来配置您的环境变量。格式如“ name=value”(不带引号)。这是一个示例:

REACT_APP_APIKEY=REACT_APP_APIKEY
REACT_APP_APPID=REACT_APP_APPID
REACT_APP_AUTHDOMAIN=REACT_APP_AUTHDOMAIN

当我调用console.log('process.env', process.env);index.js 文件时,它运行良好:

在此处输入图片说明

在门户上配置应用程序设置后,将 nodejs Web 应用程序部署到 Azure。

您可以直接在 VS Code 输出窗口中查看来自应用程序的日志输出(对 console.log 的调用)。只需右键单击应用程序节点,然后AZURE APP SERVICE资源管理器中选择“开始流式传输日志

它显示了门户应用程序设置上的环境变量:

在此处输入图片说明


顺便一提:

  1. 如果您不熟悉将节点与 Azure Web 应用程序一起使用,您可以查看以下内容:https : //docs.microsoft.com/en-us/azure/app-service/quickstart-nodejs?pivots=platform-windows
  2. 关于如何使用.env文件,请参见:https : //holycoders.com/node-js-environment-variable/