在基于nx的nodejs应用程序中使用环境变量

2024-03-01

我已经在 nrwl/nx 工作区中设置了一个包含多个 Nodejs 和 Angular 应用程序的项目。

我正在尝试使用环境文件 在 Nodejs 应用程序内。

我已经像这样设置了导入:import {environment} from './environments/environment';

然后我跑了ng serve my-node-app它显示了非生产环境。

现在我尝试做ng serve my-node-app --prod看看该应用程序如何与生产设置一起工作 - 但我收到错误:

Configuration 'production' could not be found in project my-node-app.

这是项目的 angular.json 配置:

"ui-server": {
      "root": "apps/ui/server",
      "sourceRoot": "apps/ui/server/src",
      "projectType": "application",
      "prefix": "ui-server",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@nrwl/builders:node-build",
          "options": {
            "outputPath": "dist/apps/ui/server",
            "main": "apps/ui/server/src/main.ts",
            "tsConfig": "apps/ui/server/tsconfig.app.json",
            "assets": ["apps/ui/server/src/assets"]
          },
          "configurations": {
            "production": {
              "optimization": true,
              "extractLicenses": true,
              "fileReplacements": [
                {
                  "replace": "apps/ui/server/src/environments/environment.ts",
                  "with": "apps/ui/server/src/environments/environment.prod.ts"
                }
              ]
            }
          }
        },
        "serve": {
          "builder": "@nrwl/builders:node-execute",
          "options": {
            "buildTarget": "ui-server:build"
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "apps/ui/server/tsconfig.app.json",
              "apps/ui/server/tsconfig.spec.json"
            ],
            "exclude": ["**/node_modules/**"]
          }
        },
        "test": {
          "builder": "@nrwl/builders:jest",
          "options": {
            "jestConfig": "apps/ui/server/jest.config.js",
            "tsConfig": "apps/ui/server/tsconfig.spec.json"
          }
        }
      }
    }

我错过了什么吗?


当我寻找如何获取中定义的环境变量时,我发现了这篇文章.env file.

process.env.ENVIRONMENTAL_VARIABLES在服务器上渲染时可以访问前端部分(例如Angular Universal),有.env在根Nrwlmonorepo 和 webpack 属性,例如:

const dotenv = require('dotenv-webpack');

module.exports = {
  plugins: [
    new dotenv(),
  ],
};

不要忘记改变你的angular.json:

...
"architect": {
  "build": {
     "builder": "@angular-builders/custom-webpack:browser",
       "options": {
         "customWebpackConfig": {
           "path": "./webpack.browser.config.js",
           "replaceDuplicatePlugins": true
          },
          ...

我已将自定义命名为webpack as webpack.browser.config.js.

现在,假设您有一个server/...,您将其用于某些后端内容,那么您将无法在那里访问它们。你需要安装dotenv包并在server/main.ts,假设这是您服务器的根目录,需要这个包,这样:

require('dotenv').config();

Note: until Angular 8我们还能够设置webpack- 服务器相关逻辑,在文件中,例如webpack.server.config.js。因此,可以应用与以下内容基本相同的代码dotenv,这是在webpack.browser.config.js。然而,它不再起作用了 https://github.com/angular/angular-cli/issues/16348. Angular CLI Builders 被用来构建和服务器 SSR 应用程序 https://github.com/nestjs/ng-universal/issues/418#issuecomment-688170340.

部署到Firebase/using Cloud Functions for Firebase(可能还有其他无服务器/FaaS)?

然后在你的functions您需要粘贴的文件夹.env文件也是如此。我在这里假设从functions你正在部署。

对于调试我建议:

console.log(require('dotenv').config({ debug: true }));

可能会拯救你a lot的时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在基于nx的nodejs应用程序中使用环境变量 的相关文章

随机推荐

  • 在 Cocoa 应用程序中使用异常处理与 NSError

    大家好 我一直在阅读苹果关于何时 何地 如何使用 NSError 与 try catch finally 的建议 本质上 我的印象是苹果认为最好避免使用异常处理语言结构 除非作为在意外错误情况下停止程序执行的机制 也许有人可以举一个这种情况
  • ggplot2:如果位置=“填充”,则在条形图上添加标签

    我想在a上添加 数字filled条形图 这是标签位于错误位置的图 这是数据框 x0 lt expand grid grp c G1 G2 treat c T1 T2 out c out1 out2 out3 out4 set seed 12
  • Facebook-passport 与 JWT

    我一直在使用Passport在我的服务器上进行用户身份验证 当用户在本地登录 使用用户名和密码 时 服务器会向他们发送JWT它存储在 localstorage 中 并在每次需要用户身份验证的 api 调用时发送回服务器 现在我想支持Face
  • Python zipfile.extract() 不会提取所有文件

    我正在尝试使用此处找到的代码提取压缩文件夹 def unzip source filename dest dir with zipfile ZipFile source filename as zf for member in zf inf
  • Java 中的向上转型/向下转型

    我试图理解 Java 中的向上转型和向下转型 但我对以下场景感到困惑 关于我的代码 如下 首先 为什么当我包含该行时代码无法编译myAnimal bark 第二个 假设我注释掉myAnimal bark 为什么调用myAnimal move
  • PostgreSQL 中带有字符串的 For 循环

    这里我试图连接一个字符串 CREATE FUNCTION looping RETURNS TABLE round text DECLARE i RECORD BEGIN FOR i IN select regexp split to tab
  • 我可以在一个 MTLRenderCommandEncoder 中使用多个 MTLRenderPipelineStates 吗?

    我目前正在为游戏制作简单的 UI 为了绘制每个按钮 我需要使用 2 个管道状态 每个按钮使用相同的顶点着色器 一种是使用静态颜色片段着色器绘制边框线带 另一种是使用波纹渐变绘制按钮的内部 我想知道是否需要两个不同的渲染命令编码器 每个管道一
  • 如何在平面列表中交替颜色(React Native)

    尝试交替颜色React Natives Flatlist 我相信我需要 rowID 或类似的东西来做到这一点 这是我到目前为止所得到的 let colors 123456 654321 fdecba abcdef
  • 节点如何知道哪些节点已经看到集群当前状态?

    我正在阅读 akka 文档 并在理解他们的实现方式时遇到了一些麻烦Gossip 文档在这里 http doc akka io docs akka 2 4 common cluster html Gossip Protocol 让我困惑的部分
  • rpm %config(noreplace) 用 %config 覆盖

    在我的 rpm 中 我有一个完整的目录 我想用 config noreplace 标记它 该目录中有一个文件 我想在每次安装时使用 config 中的语义将其替换为最新的 rpm 使用此处的指南 http www uxsup csx cam
  • 禁用 WPF DataGrid 中第一行的第一列

    有没有一种方法 使用样式和多触发器 始终禁用第一行的第一列DataGrid在 WPF 控件中 这是一个模板化列 在编辑模式下显示组合框 在正常模式下显示文本框 我希望它永远不会进入编辑模式 仅此列 该行中的其余列应该能够进入编辑模式 是的
  • 这里不允许AllowOverride

    我已经设置了一个虚拟主机 如下所示
  • 如何在任务计划程序上执行PowerShell脚本?

    我正在尝试执行我的 Powershell 脚本 每 5 分钟运行一次 我尝试使用 Windows 7 的任务计划程序来运行它 但它在记事本上打开我的脚本 并且不会在我的数据库中插入任何内容 下面是我的 Powershell V 2 0 脚本
  • 如何通过 AutoCAD Plot API 在 Forge 设计自动化中使用用户定义的字体

    我们使用 Forge Plot API 将 DWG 绘制为 PDF JPG 一位客户提出了使用名为 ROBBI TTF 的特殊 TTF 字体的 DWG 我想这个字体必须上传到 Forge 服务器才能使用 是否可以上传字体一次 以便它可以用于
  • Jupyter:更改输出单元格大小

    我在 vscode 上使用 Jupyter 自上次更新以来 每次我都会看到整个输出窗口 当它很大时 有时会很烦人 我想减少它并且能够滚动它 我尝试修改 最大输出大小 设置 但它对我来说没有任何改变 有什么帮助吗 谢谢你 我是 VS Code
  • SmartGit 在 Ubuntu 上的安装和使用

    我已经下载了最新的 SmartGit 安装 每次我想使用它时 我都需要从 SmartGit bin 目录运行脚本 smartgit sh 此过程每次都需要相同的存储库设置 在 Ubuntu 上安装 SmartGit 的正确方法是什么 因此
  • Apache URL 重写,

    我正在尝试让 URL 重写在我的网站上运行 这是我的 htaccess 的内容 RewriteEngine On RewriteRule blog index php page blog L RewriteRule about index
  • 对“cvCreateKalman”的未定义引用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我一直在开
  • 使用剪贴板 API 时 Chrome 中的构造函数非法?

    我目前正在构建一个网络应用程序 它是我很久以前用 Visual Basic 编写的另一个程序的翻译 在 Visual Basic 中 可以将数据直接放入操作系统的剪贴板中 Chrome 中有执行此操作的功能吗 我试过了 var magice
  • 在基于nx的nodejs应用程序中使用环境变量

    我已经在 nrwl nx 工作区中设置了一个包含多个 Nodejs 和 Angular 应用程序的项目 我正在尝试使用环境文件 在 Nodejs 应用程序内 我已经像这样设置了导入 import environment from envir