CSS text-shadow属性类似于box-shadow属性,但阴影应用于每个字母而不是元素的边界: text-shadow: 2px 2px 1px rgba(0,0,0,0.4); 值按以下顺序排列:offset-x offset-y blur-radius color. 您还可以定义多个阴影: text-shadow: 45px 25px 4px rgb(25,93,229), 25px 15px 1px rgb(25,93,229); 请注意,与box-shadow属性一样,您可以定义多个逗号分隔的阴影。box-shadow但是,与 with 不同的是,您不能定义展开值或使用inset关键字进行文本阴影。有多种方法可以创建看起来像插入阴影的文本阴影,但阴影本身实际上不会被插入。 结果 这是上述代码段中 2 个文本阴影的结果: 我只是世界上一些带有基本阴影的文字。 我只是世界上有两个阴影�..
Category : 教程系列
作者选择Creative Commons接受捐赠,作为Write for DOnations计划的一部分。 介绍 在本教程中,您将学习在React 中创建自定义组件。组件是您可以在应用程序中重用的独立功能,并且是所有 React 应用程序的构建块。通常,它们可以是简单的JavaScript 函数和类,但您可以像使用自定义的 HTML 元素一样使用它们。按钮、菜单和任何其他前端页面内容都可以创建为组件。组件还可以包含状态信息和显示降价。 在学习了如何在 React 中创建组件后,您将能够将复杂的应用程序拆分为更易于构建和维护的小块。 在本教程中,您将创建一个表情符号列表,单击时会显示其名称。表情符号将使用自定义组件构建,并将从另一个自定义组件内部调用。在本教程结束时,您将使用 JavaScript 类和 JavaScript 函数制作自定义组件,并且您将了解如何将现有代码分成可重用的部分以及如何将组件存储在可读的文件结构中。 先决条件 你需要一个运行Node.js的开发环境;本教程在 Node.js 版本 10.20.1 和 npm 版本 6.14.4 上进行了测试。要在 macOS 或 Ubuntu 18.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。 您将需要能够使用Create React App创建应用程序。您可以在如何使用 Create React App设置 React 项目中找到使用 Create ..
介绍 Jasmine 间谍用于跟踪或存根函数或方法。间谍是一种检查函数是否被调用或提供自定义返回值的方法。我们可以使用 spies 来测试依赖于服务的组件,并避免实际调用服务的方法来获取值。这有助于使我们的单元测试专注于测试组件本身的内部而不是其依赖项。 在本文中,您将学习如何在 Angular 项目中使用 Jasmine spies。 先决条件 要完成本教程,您需要: Node.js 安装在本地,您可以按照如何安装 Node.js 和创建本地开发环境来完成。 对设置 Angular 项目有一定的了解。 本教程已通过 Node v16.2.0、npmv7.15.1 和@angular/corev12.0.4 验证。 步骤 1 — 设置项目 让我们使用一个与我们在介绍Angular单元测试中使用的非常相似的示例。 首先,使用@angular/cli创建一个新项目: ng new angular-test-spies-example 然后,导航到新创建的项目目录: cd angular-test-spies-example 以前,应用程序使用两个按钮来增加和减少 0 到 15 之间的值。 对于本教程,逻辑将移至服务。这将允许多个组件访问相同的中心值。 ng generate service increment-decrement 然后increment-decrement.service.ts在您的代码编辑器中打开并将内容替换为以下代码: src/app/increment-decrement.service.ts import { Injectable } from ‘@angular/core’; @Injectable({ ..
介绍 MongoDB 是现代 Web 应用程序中常用的免费开源 NoSQL 文档数据库。本教程将帮助您在服务器上为生产应用程序环境设置 MongoDB。 先决条件 要学习本教程,您需要: 按照此初始服务器设置教程设置了一台 Ubuntu 16.04 服务器,包括 sudo 非 root 用户和防火墙。 第 1 步 – 添加 MongoDB 存储库 MongoDB 已经包含在 Ubuntu 软件包存储库中,但官方 MongoDB 存储库提供了最新版本,并且是推荐的安装软件的方式。在这一步中,我们将这个官方存储库添加到我们的服务器。 Ubuntu 通过验证软件包是否使用 GPG 密钥进行签名来确保软件包的真实性,因此我们首先必须为官方 MongoDB 存储库导入它们的密钥。 wget -qO – https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add – 成功导入密钥后,您将看到: 输出 OK 接下来,我们必须添加 MongoDB 存储库详细信息,以便apt知道从哪里下载包。 发出以下命令为 MongoDB 创建列表文件。 ..
Nginx,发音为engine-x,是一个开源 Web 服务器,用于为静态或动态网站提供服务、反向代理、负载平衡以及其他 HTTP 和代理服务器功能。 Nginx 由 Igor Sysoev 于 2004 年创建,用于处理大量并发连接,是一种流行的 Web 服务器,用于托管 Internet 上一些最大和最高流量的站点。 要了解有关 Nginx 的更多信息,请访问我们与 Nginx 相关的综合资源列�..
介绍 云计算提供按需计算资源,与物理硬件和必要的底层配置解耦。自治软件系统在云中提供这些计算资源,以实现云计算提供的自动化。由于这种自动化,可以通过与云提供商的接口以编程方式控制和操作可用资源。通过这种方式,基础设施变更(例如资源扩展)可以更快、更可靠地实施,并且在大多数情况下无需手动交互即可运行,但仍然能够监督整个过程并在某些事情没有按计划进行时恢复更改。 基础设施即代码(IaC) 是一种通过在代码中定义所需资源状态及其相互关系来自动化基础设施部署和更改的方法。代码是用专门的、人类可读的 IaC 工具语言编写的。当您执行代码时,会创建(或修改)云中的实际资源。然后,这会提示该工具代表您与云提供商或部署系统交互以应用必要的更改,而无需使用云提供商的 Web 界面。代码可以在需要时进行修改——在代码执行时,IaC 工具将负责查找代码中所需的基础设施与云中的实际基础设施之间的差异,采取措施使实际状态等于所需的状态。 对于IAC在实践工作中,创建资源不能手动后(修改一个不变的基础设施),因为这会产生代码的预期基础设施和实际状态在云之间的不和谐。此外,手动修改的资源可能会在未来的代码执行期间重新创建或删除,并且所有此类自定义都将丢失。对此的解决方案是将修改合并到基础设施代码中。 在这篇概念性文章中,我们将探讨 IaC 方法、它的好处以及实际实现的示例。我们还将介绍Terraform,这是一个开源 IaC 配置工具。我们将回顾 Terraform 在这种方法中的作用以及它与其他 IaC 工具的比较。 IaC 的好处 借助 IaC,您可以根据需要在多个提供者区域中从单一事实来源(您的声明性代码)快速创建整个基础架构的多个实例。这具有许多优势,可确保您始终如一地创建资源而不会出错,同时减少管理和手动设置时间。 IaC 的主要优点是: 部署:消除与云提供商的手动配置交互意味着更快的部署速度。 恢复:识别配置中的问题可能意味着从故障中快速恢复。 一致性:每次部署资源都是一样的,解决基础设施的脆弱性。 修改:修改资源可以有一个快速的周转时间。 可重用性:在未来的项目中重用部分基础架构架构。 版本控制:将基础架构代码存储在版本控制系统中。 可见性:将配置作为代码编写作为基础设施的文档。 在 IaC 工作流中,您可以以标准化方式反复启动基础设施,这意味着软件开发和测试是一个更快的过程,因为开发、登台、质量保证测试和生产环境是分开的。您可以根据需要多次部署基础架构,从而重复编写代码并对其进行实时测试的过程。一旦您的书面基础设施满足所有要求,您就可以将其部署在所需的云环境中。当出现新需求时,您可以重复该过程。 IaC 基于代码,应始终与版本控制软件 (VCS) 相结合,例如Git。将基础架构声明存储在 VCS 中使其易于检索,更改对团队中的每个人都可见,并提供历史点的快照,因此如果新修改产生错误,您始终可以回滚到早期版本。高级 VCS 可以配置为在添加批准的更改时自动触发 IaC 工具以更新云中的基础架构。 您现在知道 IaC 方法是什么,以及它带来的好处。您现在将了解状态,即 IaC 中使用的资源跟踪机制。然后,您将使用 IaC 跟进 Terraform 和其他工具的作用。 什么是“状态”? ..
介绍 Node.js 是用于服务器端编程的 JavaScript 运行时。它允许开发人员使用 JavaScript 创建可扩展的后端功能,许多人已经从基于浏览器的 Web 开发中熟悉了这种语言。 在本指南中,我们将向您展示在 CentOS 8 服务器上安装 Node.js 的三种不同方法: 使用dnf安装nodejs从CentOS的默认AppStream库包 安装nvmNode 版本管理器,并使用它来安装和管理多个版本的node node从源代码构建和安装 大多数用户应该dnf用来安装 Node.js 的内置预打包版本。如果您是开发人员或需要管理多个已安装的 Node 版本,请使用该nvm方法。大多数用户很少需要从源代码构建。 先决条件 要完成本教程,你需要运行的CentOS 8的服务器,我们将假定你登录到该服务器作为非根,sudo使能的用户。要进行设置,请参阅我们的 CentOS 8 初始服务器设置指南。 选项 1 — 从 CentOS AppStream 存储库安装 Node Node.js 可从 CentOS 8 的默认AppStream软件存储库中获得。有多个版本可用,您可以通过启用适当的模块流在它们之间进行选择。首先nodejs使用dnf命令列出模块的可用流: sudo dnf module list nodejs OutputName Stream Profiles Summary nodejs 10 [d] ..
作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 在TypeScript 中,枚举或枚举类型是具有常量长度的数据结构,其中包含一组常量值。这些常量值中的每一个都称为枚举的成员。在设置只能是一定数量的可能值的属性或值时,枚举很有用。一个常见的例子是一副扑克牌中单张牌的花色值。每张抽到的牌都可以是梅花、钻石、红心或黑桃;除了这四个之外,没有可能的花色值,并且这些可能的值不太可能改变。因此,枚举将是一种有效且清晰的方式来描述一张牌的可能花色。 尽管 TypeScript 的大多数功能对于在编译期间抛出错误很有用,但枚举也可用作可以为代码保存常量的数据结构。TypeScript在编译器发出的最终代码中将枚举转换为JavaScript 对象。因此,您可以使用枚举使代码库更具可读性,因为您可以将多个常量值分组在同一数据结构中,同时还使代码比仅const放置不同的变量更类型安全。 本教程将解释用于创建枚举类型的语法、TypeScript 编译器在幕后创建的 JavaScript 代码、如何提取枚举对象类型以及涉及游戏开发中位标志的枚举用例。 先决条件 要学习本教程,您需要: 您可以在其中执行 TypeScript 程序以跟随示例进行操作的环境。要在本地计算机上进行设置,您需要以下内容: 这两个节点和NPM(或丝安装才能运行的开发环境,手柄的打字稿相关的软件包)。本教程使用 Node.js 版本 14.3.0 和 npm 版本 6.14.5 进行了测试。要在 macOS 或 Ubuntu 18.04 上安装,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。如果您使用的是适用于 Linux的Windows 子系统 (WSL),这也适用。 此外,您将需要tsc在您的机器上安装TypeScript 编译器 ( )。为此,请参阅TypeScript 官方网站。 如果您不想在本地机器上创建 TypeScript ..
作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 大多数Let’s Encrypt证书是使用 HTTP 验证颁发的,这允许在单个服务器上轻松安装证书。但是,HTTP 验证并不总是适合颁发用于负载均衡网站的证书,也不能用于颁发通配符证书。 DNS 验证允许使用 DNS 记录来验证证书颁发请求,而不是通过 HTTP 提供内容。这意味着可以同时为在负载均衡器后面运行的 Web 服务器集群或无法通过 Internet 直接访问的系统颁发证书。使用 DNS 验证也支持通配符证书。 在极致的DNS-certbot工具是用于连接Certbot到证书验证记录可以自动通过API,当你申请一个证书设置第三方DNS服务器。这样做的好处是,您不需要将 Certbot 直接与您的 DNS 提供商帐户集成,也不需要授予它对完整 DNS 配置的无限制访问权限,这有利于安全。 委托DNS 区域用于将证书验证记录的查找重定向到第三方 DNS 服务,因此一旦完成初始设置,您就可以请求任意数量的证书,而无需执行任何手动验证。 acme-dns-certbot 的另一个主要优点是它可用于为可能在负载均衡器后面运行或无法通过 HTTP 直接访问的单个服务器颁发证书。在这些情况下不能使用传统的 HTTP 证书验证,除非您在每台服务器上设置验证文件。如果您想为无法通过 Internet 访问的服务器(例如内部系统或临时环境)颁发证书,acme-dns-certbot 工具也很有用。 在本教程中,您将使用 Certbot 的 acme-dns-certbot 挂钩来使用 DNS 验证颁发 Let’s Encrypt 证书。 先决条件 要完成本教程,您需要: 按照 ..
介绍 随着对旨在为关键系统提供服务的可靠和高性能基础设施的需求不断增加,可扩展性和高可用性这两个术语变得非常流行。虽然处理增加的系统负载是一个常见的问题,但减少停机时间和消除单点故障同样重要。高可用性是大规模基础设施设计的一种质量,可解决后面这些问题。 在本指南中,我们将讨论高可用性究竟意味着什么以及它如何提高基础设施的可靠性。 什么是高可用性? 在计算中,可用性一词用于描述服务可用的时间段,以及系统响应用户请求所需的时间。高可用性是系统或组件的一种质量,可确保在给定时间段内具有高水平的操作性能。 测量可用性 可用性通常表示为一个百分比,表示在给定的时间段内特定系统或组件的预期正常运行时间,其中 100% 的值表示系统永远不会出现故障。例如,在一年内保证 99% 可用性的系统最多可能有 3.65 天的停机时间 (1%)。 这些值是根据多种因素计算得出的,包括计划内和计划外的维护期,以及从可能的系统故障中恢复的时间。 高可用性如何工作? 高可用性用作基础设施的故障响应机制。它的工作方式在概念上非常简单,但通常需要一些专门的软件和配置。 高可用性何时重要? 在建立强大的生产系统时,最大限度地减少停机时间和服务中断通常是重中之重。不管如何可靠的系统和软件,可能会出现问题,可以降低你的应用程序或服务器。 对于您的基础架构实现高可用性是减少这类事件的影响的有用策略。高可用性系统可以自动从服务器或组件故障中恢复。 什么使系统具有高可用性? 高可用性的目标之一是消除基础架构中的单点故障。单点故障是您的技术堆栈的一个组件,如果它变得不可用,将导致服务中断。因此,这是为你的应用程序,没有冗余的正常功能的必要条件的任何部件被认为是单一故障点。 为了消除单点故障,堆栈的每一层都必须为冗余做好准备。例如,假设您的基础架构由负载均衡器后面的两个相同的冗余 Web 服务器组成。来自客户端的流量将在 Web 服务器之间平均分配,但如果其中一台服务器出现故障,负载均衡器会将所有流量重定向到其余的在线服务器。 此场景中的 Web 服务器层不是单点故障,因为: 相同任务的冗余组件已就位 该层之上的机制(负载均衡器)能够检测组件中的故障并调整其行为以及时恢复 但是如果负载均衡器离线会发生什么? 对于所描述的场景,这在现实生活中并不少见,负载平衡层本身仍然是单点故障。然而,消除这个剩余的单点故障可能具有挑战性;尽管您可以轻松配置额外的负载均衡器来实现冗余,但负载均衡器之上并没有明显的点来实现故障检测和恢复。 仅靠冗余并不能保证高可用性。必须有一种机制来检测故障并在堆栈的一个组件不可用时采取措施。 冗余系统的故障检测和恢复可以使用自上而下的方法实现:顶部的层负责监控紧邻其下方的层是否出现故障。在我们之前的示例场景中,负载均衡器是顶层。如果其中一台 Web 服务器(底层)变得不可用,负载均衡器将停止为该特定服务器重定向请求。 这种方法往往更简单,但它有局限性:在您的基础架构中,顶层可能不存在或遥不可及,负载均衡器层就是这种情况。在外部服务器中为负载均衡器创建故障检测服务只会创建一个新的单点故障。 在这种情况下,分布式方法是必要的。多个冗余节点必须连接在一起作为一个集群,其中每个节点都应该具有同等的故障检测和恢复能力。 然而,对于负载平衡器的情况,由于名称服务器的工作方式,还有一个额外的复杂性。从负载均衡器故障中恢复通常意味着故障转移到冗余负载均衡器,这意味着必须进行 DNS 更改才能将域名指向冗余负载均衡器的 IP 地址。像这样的更改可能需要相当长的时间才能在 Internet 上传播,这将导致该系统严重停机。 一种可能的解决方案是使用DNS 循环负载平衡。但是,这种方法并不可靠,因为它将故障转移留给客户端应用程序。 更强大和可靠的解决方案是使用允许灵活 IP 地址重新映射的系统,例如浮动 IP。按需 IP 地址重新映射通过提供可在需要时轻松重新映射的静态 ..