使用AngularCLI开始使用Angular

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Open Internet/Free Speech Fund 来接受捐赠。

介绍

Angular 是一种流行的 JavaScript 框架,可创建交互式 Web、移动和桌面应用程序。 强制的关注点分离、一流的 TypeScript 支持和强大的命令行界面 (CLI) 使 Angular 成为现代企业应用程序的首选。

Angular CLI 简化了开始使用 Angular 的过程。 CLI 还负责代码生成、生产构建和依赖管理。

在本教程结束时,您将使用 Angular CLI 创建一个 Angular 应用程序。 您将使用 CLI 创建一个新应用程序,在浏览器中运行它,并为生产进行构建。

您还将了解 Angular 如何将表示、样式和业务关注点拆分为单独的单元。 这涉及练习 HTML、CSS 和 TypeScript 层如何相互交互。

先决条件

要阅读本文,您需要以下内容:

  • 终端或命令行界面的基本知识。 阅读 Linux 终端简介 指南以了解更多信息。
  • 一些 TypeScript 知识是有帮助的,但不是必需的。 要查看 TypeScript,请查看 How To Code in TypeScript 系列。
  • 熟悉 CSSHTML,并对 JavaScript 有基本的了解,您可以通过阅读 如何在 JavaScript 中编写代码系列来获得这些知识。
  • Node.js 版本 8.9 及更高版本。 您可以通过 从网站 下载它来安装 Node,或者使用 Node 版本管理器 来管理您的 Node 安装。

第 1 步 — 安装 Angular CLI 并创建您的第一个应用程序

在这一步中,您将在本地计算机上安装 Angular CLI 并构建您的 Angular 应用程序。 首先,您将下载 Angular CLI 并实现以下三个目标:

  • 创建一个新的 Angular 项目
  • 运行本地开发服务器
  • 为生产构建此应用程序

在终端中运行以下命令以下载 Angular CLI:

npm install -g @angular/cli

为确保安装成功,请在终端中运行以下命令:

ng version

Angular CLI 会将当前版本和周围环境打印到终端:

OutputAngular CLI: 12.1.4
Node: 14.17.4
Package Manager: npm 6.14.14
OS: darwin x64

要开始使用 Angular,您将使用名为 my-first-angular-app 的 CLI 创建您的第一个工作区。 Angular 中的项目被称为 工作区

在终端中运行以下命令:

ng new my-first-angular-app

该命令将询问一些用于配置工作区的初始化问题:

Output
? Would you like to add Angular routing? (y/N) N
? Which stylesheet format would you like to use?
❯ CSS
 SCSS   [ https://sass-lang.com/documentation/syntax#scss                ]
 Sass   [ https://sass-lang.com/documentation/syntax#the-indented-syntax ]
 Less   [ http://lesscss.org

对于第一个问题,请输入 N,因为您不会为此项目使用 Angular 路由。 按 ENTERRETURN 键。

在第二个问题中,选择 CSS 作为样式表格式。

ENTERReturn 键初始化您的项目。

您现在将拥有一个名为 my-first-angular-app 的 Angular 工作区。 Angular CLI 安装项目创建所需的任何依赖项。 有关 Angular CLI 和工作区创建的更多信息,请查看 Angular 文档

现在您已经下载了 Angular CLI 并创建了一个新的 Angular 工作区,让我们看看如何在浏览器中运行您的应用程序。

第 2 步 — 在浏览器中运行 Angular 应用程序

在此步骤中,您将使用 CLI 在浏览器中运行您的应用程序。 每当文件系统发生变化时,Angular 的本地开发服务器都会刷新浏览器。 快速的反馈周期确保您可以尽快看到更改的结果。

Angular 的本地开发服务器为您提供以下好处:

  • 在您选择的端口上启动本地 Web 服务器。
  • 注意文件中的更改并在更改时重新加载浏览器。
  • 管理 TypeScript 编译和捆绑。

通过在终端中运行以下命令,确保您位于 my-first-angular-app 目录中:

cd my-first-angular-app

接下来,通过在终端中运行以下命令来启动 Web 服务器:

ng serve -o

Angular 将构建您的开发应用程序并将其公开在 http://localhost:4200 的本地 Web 服务器上。 该应用程序将在 Web 浏览器中打开,因为您将 -o 标志添加到 ng serve

您可以通过检查终端的输出来验证这是否成功:

Output✔ browser application bundle generation complete.

Initial Chunk Files | Names         |      Size
vendor.js           | vendor        |   2.08 MB
polyfills.js        | polyfills     | 128.57 kB
main.js             | main          |  10.81 kB
runtime.js          | runtime       |   6.59 kB
styles.css          | styles        | 179 bytes

                    | Initial Total |   2.22 MB

Build at: 2021-08-01T23:30:14.012Z - Hash: 3302767a539a29a592de - Time: 7433ms
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **

✔ Compiled successfully.

您可以将其他配置选项传递给 ng serve 以自定义环境。 您可以在 此处查看配置选项 的完整列表。

您现在将在屏幕上看到您的 Angular 应用程序。 只要 ng serve 正在运行,对文件系统的任何更改都会导致浏览器更新为新内容。 在应用程序的整个开发过程中保持 ng serve 运行。

在这一步中,您使用 ng serve 在浏览器中运行了 Angular 应用程序。 您将配置选项传递给 CLI 命令,例如 `ng serve -o'。

接下来,您将对 Angular 组件进行更改,并查看屏幕上反映的更改。

第 3 步 — 更新主页模板

在此步骤中,您将通过编辑 HTML 在屏幕上显示内容。 HTML 模板也称为 Angular 组件的 视图 。 在此步骤结束时,您将了解如何使用您的内容更新入门模板。

您可以在 src/app/app.component.html 找到 AppComponent 的 HTML。 在您选择的文本编辑器中打开它并删除内容。 您应该准备好一个空白的 HTML 文档来编写您的标记。

将以下 HTML 副本添加到您的 src/app/app.component.html

src/app/app.component.html

<div>
 <article>
  <header>
    <h1>I'm learning Angular at DigitalOcean</h1>
  </header>
  <section>
    <p>Here's what I've learned so far:</p>
    <ul>
      <li>
        Angular allows us to create performant web applications using TypeScript.
      </li>
      <li>
        I can use the Angular CLI to create/interact with my Angular workspace.
      </li>
      <li>
        Making changes will automatically be shown on screen, thanks to the local development server!
      </li>
    </ul>
  </section>
 </article>
</div>

您添加了一个 <div> ,其中包含一个标题和一个包含无序列表的部分。 由于 <h1> 标签,您将看到以项目符号显示的无序列表和以大字体显示的标题。

请注意,您的应用程序组件会在您保存文档后立即更新。 随意尝试您自己的进一步添加并实时见证它们。

您现在已经更新了基础应用程序组件的 HTML 模板。 这是 Angular 应用程序的入口组件。 在下一步中,您将使用 CSS 设置内容样式。

第 4 步 — 更新主页样式

在这一步中,您将使用 CSS 设置应用程序的样式。 Angular 允许您同时使用作用域样式和全局样式。 将 CSS 限定为组件的能力可以在不妨碍您的设计的情况下实现灵活性。

您将首先通过编辑 src/styles.css 为您的应用程序设置一些默认的全局样式:

src/app/app.component.css

body {
 background-color: #fce7f3;
 display: flex;
 align-items: center;
 justify-content: center;
 height: 100vh;
 font-size: 2rem;
}

这些样式将您的所有内容集中在屏幕中间,并设置温暖的背景颜色。 请记住,对全局 styles.css 所做的任何更改都将显示在以后的每个组件中。 如果成功,您将在浏览器中查看以下内容:

注意:请记住在每次更改后保存文件,然后再进行下一步。


Angular CLI 将 styles.css 添加到 angular.json 文件中 build builderstyles 数组中。 您不必手动添加对 styles.cssindex.html 的引用。

角.json

{
 "projects": {
 "my-first-angular-app": {
 ...
 "architect": {
 "build": {
 "builder": "@angular-devkit/build-angular:browser",
 "options": {
 ...
 "styles": ["src/styles.css"]
          }
        }
      }
    }
  }
}

您将在第 6 步中查看有关 Angular 构建过程的更多信息。

接下来,让我们为应用组件设置样式。 添加到组件的样式不会出现在应用程序的其他部分。 有关样式范围的更多信息,请阅读 Angular 文档

前往 src/app/app.component.css 并在全局样式下方添加以下 CSS:

...
[label src/app/app.component.css] article {
 background-color: #fbcfe8;
 padding: 2rem 4rem;
 color: #1f2937;
 font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
 box-shadow: 20px 20px 0px #db2777;
 border: 6px solid #831843;
 border-radius: 2rem;
}

header {
 text-decoration: underline;
}

ul {
 list-style: square;
}

您的样式现在将出现在浏览器中 <article> 标记内的内容中:

设置好样式后,让我们探索如何动态更改用户界面。

第 5 步 — 更新主页 TypeScript

在这一步中,您将在 Angular 应用程序中使用 TypeScript,该应用程序位于 src/app/app.component.ts。 Angular 使用装饰器通过 ngStylengClass 动态设置组件的样式。

Angular 组件使用 JavaScript class 语法。 要告诉 Angular 这个类是一个组件,你需要在类中添加一个 @Component(...) 装饰器。

TypeScript 和 Angular 中的装饰器围绕类或函数声明提供元数据。 在 Angular 中,它们专门用于向依赖注入系统和编译器提供元数据。 这允许任意代码在执行类或函数之前、期间和之后运行。 然后,Angular 将连接到组件的文件关联起来。 您可以在 此处 找到有关 TypeScript 中装饰器的更多信息。

您可以在使用 CLI 创建的 AppComponent 中看到这一点。 打开 src/app/app.component.ts 并观察以下内容:

src/app/app.component.ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
 ...
}

请注意,styleUrls 属性是一个具有一个值的数组。 这是因为 app-root 包含一个 CSS 样式表。 您可以向 styleUrls 数组添加更多样式表,Angular 会将它们捆绑在一起。

selector 是标识此组件的 CSS 选择器。 这将是 HTML 模板中组件的名称,您可以在 index.html 中看到:

索引.html

<!doctype html>
  <html lang="en">
    <head>
      ...
    </head>
    <body>
      <app-root></app-root>
    </body>
</html>

Angular 允许您将 src/app/app.component.ts 文件中定义的应用程序状态绑定到其位于 src/app/app.component.html 的 HTML 模板。

AppComponent 中,创建一个名为 myNextProject 的新变量并将其赋值为 a porfolio website

src/app/app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  myNextProject = 'a portfolio website.';
}

您现在可以使用该变量作为 src/app/app.component.html 的绑定器,并将 TypeScript 中定义的数据连接到您的 HTML 模板。 Angular 通过将变量括在双花括号内来定义 HTML 中的 TypeScript 变量:

{{ myNextProject }}

src/app/app.component.html 中,在 <footer> 标记之间的文本中添加变量:

src/app/app.component.html

<article>
  <header>
    <h1>I'm learning Angular at DigitalOcean</h1>
  </header>
  <section>
    <p>Here's what I've learned so far:</p>
    <ul>
    <li>
      Angular allows you to create performant web applications using TypeScript.
    </li>
    <li>
      I can use the Angular CLI to create/interact with my Angular workspace.
    </li>
    <li>
      Making changes will automatically be shown on screen, thanks to the local development server!
    </li>
  </ul>
 </section>
 <footer>
    <p>For my next project, I'll be making {{ myNextProject }}</p>
 </footer>
</article>

<p> 标签内的内容将在浏览器中呈现为 For my next project, I'll be making a portfolio website.

如此处执行的,模板中的绑定值允许您向用户提供动态内容。

您还可以使用 TypeScript 文件中的函数来确定输出。 在您的 src/app/app.component.ts 中,定义一个新变量 showPurpleBoxShadow 和一个 getBoxShadow() 函数:

src/app/app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  myNextProject = 'a portfolio website.';

  showPurpleBoxShadow = true;

 get boxShadow() {
 if (this.showPurpleBoxShadow) return '20px 20px 0px #bdb2ff';

 return '20px 20px 0px #DB2777';
  }
}

导航到 src/app/app.component.html 文件并在 <article> 标签中插入 [ngStyle] 指令:

src/app/app.component.html

<article [ngStyle]="{'box-shadow': boxShadow}">...</article>

ngStyle 是一个将应用程序状态绑定到 CSS 样式的 Angular 指令。 在 Angular 中,指令是 DOM 元素上的“标记”,例如 [ngStyle]。 然后 Angular 能够将功能附加到 DOM 元素。

在这种情况下,您将根据 showPurpleBoxShadow 的值应用不同的 box-shadow 样式。 您也可以使用 ngClass 指令获得相同的结果。 这将有条件地应用 CSS 类,而不是应用 CSS 样式。

打开 src/app/app.component.css 并添加以下 CSS 类:

src/app/app.component.css

.purple-box-shadow {
 box-shadow: 20px 20px 0px #bdb2ff;
}

.pink-box-shadow {
 box-shadow: 20px 20px 0px #db2777;
}

然后,在 src/app/app.component.ts 中,更新 boxShadow getter 以返回类名:

src/app/app.component.ts

export class AppComponent {
 ...

 get boxShadow() {
 if (this.showPurpleBoxShadow) return 'purple-box-shadow';

 return 'pink-box-shadow';
  }
}

然后,您可以使用 ngClass 指令有条件地将 purple-box-shadow 类应用于 <article> 标记:

src/app/app.component.html

<article [ngClass]="boxShadow">
...
</article>

如果成功,您将在浏览器中查看以下内容:

您现在可以在屏幕上查看您的设计清单,而无需在每次更改后进行额外的重新部署。 让我们看看如何构建用于开发和生产的 Angular 应用程序。

第 6 步 — 构建您的生产环境

在这一步中,您将使用 Angular CLI 为您的 Angular 项目生成生产版本。 Angular 使用 Webpack,您将使用它来捆绑文件并优化网站以进行生产。

Webpack 是一个用于 JavaScript 应用程序的开源模块捆绑器。 它提供了按需加载代码/资产的能力。 它提供了一个强大的优化系统,可以最大限度地减少从服务器获取所有必要资产所需的请求数量。

要创建自定义 Webpack 配置文件,请查看文章 如何将自定义 webpack 配置与 Angular CLI Builders 一起使用以获取更多信息。

默认情况下,Angular CLI 提供两种类型的构建:

发展

未经优化的代码版本包含源映射和运行时检查,可帮助您在开发应用程序 并将其部署到生产环境之前 时检测和调查问题。

当您运行命令 ng serve 时,Angular CLI 将生成代码的未优化版本。 您应该避免将开发构建部署到生产中。 开发版本不包含快速、生产就绪应用程序所需的任何优化。

您可以通过在终端中运行以下命令,使用 development 配置构建项目:

ng build --configuration development

生产

使用 production 配置构建您的项目将生成优化的代码并为您提供以下好处:

  • 代码缩小和捆绑以减小应用程序的大小。
  • Tree-shaking 使导入模块的未使用部分从最终构建中排除,从而节省带宽而不会对功能产生不利影响。
  • 对于较小的包大小,没有源映射、编译器错误和警告。

生产构建对于面向公众的应用程序至关重要,因为页面速度和交付时间是搜索引擎和用户的关键指标。 有关页面速度和交付时间优化的更多信息,请单击这里

要生成生产版本,请从您的项目文件夹中运行 ng build。 CLI 将检查您的代码并生成应用程序的优化、缩小版本。

如果成功,它将为您提供有关捆绑包的统计信息:

Output✔ browser application bundle generation complete.
✔ Copying assets complete.
✔ Index html generation complete.

Initial Chunk Files        | Names     |   Size
main.0deeec3d31917b111ae5.js   | main     | 104.77 kB
polyfills.313e64a67eb403254da5.js | polyfills   | 35.96 kB
runtime.284ffbeed756735f6289.js  | runtime    |  1.02 kB
styles.e5294562d7aae78a8725.css  | styles    | 113 bytes

| Initial Total | 141.86 kB

请注意文件名在其名称后如何具有唯一的哈希值。 Angular 添加了这个以允许“缓存清除”。 随着每次构建时哈希值的变化,浏览器可以在重新访问该站点时重置其缓存。

如果您对文件进行任何更改,哈希值将会更改,并且浏览器将重新加载新文件。 否则,浏览器将使用缓存版本。

当包大小太大时,Angular CLI 也可以在这个阶段显示警告。 随着应用程序的增长,您应该继续查看捆绑包的大小。

您可以在 angular.json 文件中找到与 Angular CLI 命令对应的配置选项,例如 ng buildng serve。 通过 configurations 键导航以查看为 productiondevelopment 构建设置的选项。 您可以在每个构建的基础上配置这些限制。

角.json

{
 ...
 "projects": {
 "my-first-angular-app": {
 "architect": {
 "build": {
 ...
 "configurations": {
 "production": {
 "budgets": [
 {
  "type": "initial",
  "maximumWarning": "500kb",
  "maximumError": "1mb"
 },
 {
  "type": "anyComponentStyle",
  "maximumWarning": "2kb",
  "maximumError": "4kb"
 }
],
            }
          }
        }
      }
    }
  }
}

ng build 命令将这些输出到 dist/my-first-angular-app 文件夹以访问构建的文件以进行部署。 您可以使用这些文件将应用程序部署到服务器或 CDN。 有关这方面的更多信息,请参阅 Angular CLI 文档

在这一步中,您学习了如何使用 Angular CLI 创建开发和生产构建。 您还考虑了生成高性能 Web 应用程序的重要因素,例如包大小。

结论

在本教程中,您使用 Angular CLI 创建了一个 Angular 项目。 您在浏览器中执行并运行了项目,并更新了应用程序的外观和执行方式。

您使用 CLI 生成了生产构建并了解了配置选项,以便更深入地了解 CLI 的运行方式和位置。

要了解有关 Angular CLI 和其他命令的更多信息,请查看 Angular CLI 文档