当前位置: 首页 > news >正文

利用 Angular 发挥环境的力量

一.介绍

您是否曾想过如何在不同的环境中为同一应用设置不同的颜色、标题或 API 调用?可以肯定的是,生产 API 和测试 API 是不同的,应谨慎使用。部署时,我们不会在项目的所有地方手动更改所有 API 调用。不应这样做,因为这很危险。

在 Angular 中,有一种简单的方法可以为不同的环境设置不同的配置。这样我们就可以使用并部署到任意数量的阶段/环境,而无需更改代码。这称为环境文件。

简而言之,我们可以为生产创建一个名为 environment.ts 的环境文件,为开发阶段创建一个名为 environment.development.ts 的环境文件。然后,根据我们发布应用程序的位置,将使用正确的环境文件。

只需要进行一些配置,收益却是巨大的。

在本文中,我将向您展示如何开始并提供具有不同文本和 API 的示例。

二.入门

  1. 创建一个新的应用程序: ng new angular-environment-demo --standalone false。
  2. 生成环境文件: ng generate environment。

注意:从 Angular 15.1 开始,环境文件不会自动生成。

三.环境文件的层次结构

无论是 environment.development.ts 还是 environment.ts,一开始都包含相同的对象。所有配置都应与此对象一起,并且都应包含相同的键。

例如,如果 environment.development.ts 需要一个键值对,如:‘weather_status’: ‘Good’,而 environment.ts 不会使用它,则该文件中会有以下内容:‘weather_status’: ‘’。这是因为,由于您在代码中使用它,并且您的代码将在它将使用的环境文件中查找它 [这将在后面解释]。如果您的代码指向另一个环境文件,它仍会查找它但找不到它;导致编译错误。

让我们添加两个不同的页面标题。

在 app.component.ts 文件或任何其他想要使用环境文件中的值的 ts 文件中,您可以像以下方式访问它们:“环境。<<您想要访问的值。>>。下面是在 app.component.ts 的 ngOnInit 中使用 pageTitle 的示例。

注意第 2 行的导入。现在,您可以导入任何环境文件。

在第 13 行,我们将环境中的“pageTitle”的值分配给“this.title”。

在 HTML 文件中,我们使用如下所示的“标题”。

当您使用 ng serve 提供应用程序时,您将看到以下屏幕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们只执行“ng serve”时,将使用“environment.development.ts”文件中的值。

如果您想使用 environment.ts 文件中的配置,您应该在 angular.json 文件中添加以下内容。

"fileReplacements": [{"replace": "src/environments/environment.development.ts","with": "src/environments/environment.ts"}
],

这些代码应该添加到 angular.json 文件的“projects”->“architect”->“build”->“configurations”->“production”下。

下面是 angular.json 文件的完整示例。

{"$schema": "./node_modules/@angular/cli/lib/config/schema.json","version": 1,"newProjectRoot": "projects","projects": {"angular-environment-demo": {"projectType": "application","schematics": {"@schematics/angular:component": {"standalone": false},"@schematics/angular:directive": {"standalone": false},"@schematics/angular:pipe": {"standalone": false}},"root": "","sourceRoot": "src","prefix": "app","architect": {"build": {"builder": "@angular-devkit/build-angular:application","options": {"outputPath": "dist/angular-environment-demo","index": "src/index.html","browser": "src/main.ts","polyfills": ["zone.js"],"tsConfig": "tsconfig.app.json","assets": ["src/favicon.ico","src/assets"],"styles": ["src/styles.css"],"scripts": []},"configurations": {"stagging": {"fileReplacements": [{"replace": "src/environments/environment.ts","with": "src/environments/environment.stagging.ts"}]},"production": {"budgets": [{"type": "initial","maximumWarning": "500kb","maximumError": "1mb"},{"type": "anyComponentStyle","maximumWarning": "2kb","maximumError": "4kb"}],"fileReplacements": [{"replace": "src/environments/environment.development.ts","with": "src/environments/environment.ts"}],"outputHashing": "all"},"development": {"optimization": false,"extractLicenses": false,"sourceMap": true,"fileReplacements": [{"replace": "src/environments/environment.ts","with": "src/environments/environment.development.ts"}]}},"defaultConfiguration": "production"},"serve": {"builder": "@angular-devkit/build-angular:dev-server","configurations": {"stagging": {"buildTarget": "angular-environment-demo:build:stagging"},"production": {"buildTarget": "angular-environment-demo:build:production"},"development": {"buildTarget": "angular-environment-demo:build:development"}},"defaultConfiguration": "development"},"extract-i18n": {"builder": "@angular-devkit/build-angular:extract-i18n","options": {"buildTarget": "angular-environment-demo:build"}},"test": {"builder": "@angular-devkit/build-angular:karma","options": {"polyfills": ["zone.js","zone.js/testing"],"tsConfig": "tsconfig.spec.json","assets": ["src/favicon.ico","src/assets"],"styles": ["src/styles.css"],"scripts": []}}}}}
}

当我们想要充分利用环境文件时,这个文件是最重要的。

要使用 environment.ts 文件中的配置,我们需要使用以下命令为应用程序提供服务:“ng serve --configuration=production”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,您没有在代码中做任何更改,您只是添加了新的配置并使用新命令为应用程序提供服务。

例如,如果您在生产环境中提供服务,则可以使用此命令在该环境中提供服务。无需更改代码。

通常有多个环境主要用于测试。

当您需要适应新环境时,需要遵循一些步骤。

  • 在环境文件夹中创建一个新的环境文件。例如,我们可以添加 environment.staging.ts。
  • 一旦创建,不要忘记添加其他环境文件中存在的值。

  • 在angular.json文件中,我们需要在configuration下添加一个新的配置。

  • 最后一部分仍在 angular.json 文件中。现在我们需要添加配置以使用相应的环境文件为应用程序提供服务。这些更改在“项目”->“架构师”->“服务”->“配置”下完成。

  • 要使用 environment.stagging.ts 文件中的配置为应用程序提供服务,我们运行以下命令:ng serve --configuration=stagging。服务完成后,加载的屏幕如下。

四.使用环境文件来使用不同的 API。

环境文件的另一个强大的应用是它可以轻松、几乎无缝地用于调用不同环境的不同 API。

以下是步骤。

  • 在项目的所有环境文件中的环境对象中添加相应的键值对,如下所示。
export const environment = {pageTitle: "Dinosaur",apiUrl: "https://dinosaur-facts-api.shultzlab.com/dinosaurs"
};
  • 在您的 component.ts 文件中,无论需要什么,您都可以用任何您想要的方法调用 Web 服务。
  • 对于这个例子,我们将在承诺中使用 fetch 方法。
getInfo(){const myPromise = new Promise((resolve, reject) => {fetch(environment.apiUrl).then((response) => response.json()).then((data) => {resolve(data)}).catch((error) => reject(error))});myPromise.then((result: any) => {const element = document.getElementById('txtResult');if (element) {element.innerHTML = JSON.stringify(result.slice(0, 5));}console.log(result.slice(0, 5));}).catch((error) => console.log(error)).finally(() => console.log('promise done'));
}
  • 请注意,在调用中,我们没有传递任何 api。相反,我们使用来自环境文件的变量。
  • 此时,函数已完成,可以在单击按钮时调用。
  • 当我们使用 ng serve 来提供应用程序并单击按钮时,我们得到以下内容。

  • 当我们使用 ng serve --configuration=production 提供应用程序时,输出如下:

  • 请注意,代码没有任何变化。我们只是使用不同的服务配置为应用程序提供服务。
  • 当您部署到环境时,情况也是如此。无论您是使用 Azure 还是其他方式部署 Angular 应用程序,系统都会在某个时候要求您输入运行 Angular 应用程序的命令。提供正确的服务配置将使用所需的环境文件并显示相应的信息或调用所需的 API。无需更改代码。

五.结论

环境文件非常重要且功能强大。最大限度地利用它们将避免您在不同阶段部署时进行手动更改。

相关文章:

  • 区块链ddos防护怎么做
  • node中使用http创建web服务器
  • C++初学(10)
  • 常见框架漏洞
  • exptern “C“的作用,在 C 和 CPP 中分别调用 openblas 中的 gemm 为例
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • oracle库PASSWORD_VERSIONS 对应的加密方式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • 【复旦微FM33 MCU 外设开发指南】系统篇——时钟
  • java 基础知识一
  • 国产数据库备份恢复实现
  • 在图片URL后面添加一个参数以清理缓存
  • [Unity实战]Mirror网络与Addressable场景管理
  • 多租户系统数据隔离方案
  • 深入理解SQL中的窗口函数
  • 2017 年终总结 —— 在路上
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java新版本的开发已正式进入轨道,版本号18.3
  • java中具有继承关系的类及其对象初始化顺序
  • k个最大的数及变种小结
  • XML已死 ?
  • 初识 beanstalkd
  • 观察者模式实现非直接耦合
  • 京东美团研发面经
  • 入手阿里云新服务器的部署NODE
  • 使用SAX解析XML
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​secrets --- 生成管理密码的安全随机数​
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # Kafka_深入探秘者(2):kafka 生产者
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (js)循环条件满足时终止循环
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (南京观海微电子)——I3C协议介绍
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ./和../以及/和~之间的区别
  • .Net 8.0 新的变化
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • ::前边啥也没有
  • @Transaction注解失效的几种场景(附有示例代码)
  • [17]JAVAEE-HTTP协议
  • [2]十道算法题【Java实现】
  • [20171102]视图v$session中process字段含义
  • [AIGC] HashMap的扩容与缩容:动态调整容量以提高性能