MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

手把手教你创建Angular项目

2023-11-215.2k 阅读

准备工作

在开始创建 Angular 项目之前,我们需要确保开发环境中安装了必要的工具。

安装 Node.js

Angular 项目依赖于 Node.js 运行时环境。你可以从 Node.js 官方网站(https://nodejs.org/)下载并安装最新的长期支持(LTS)版本。安装完成后,打开命令行工具,输入以下命令检查 Node.js 是否安装成功:

node -v

该命令会输出版本号,例如 v14.17.0,表示安装成功。

安装 npm

npm(Node Package Manager)是 Node.js 的默认包管理器,通常在安装 Node.js 时会一并安装。同样在命令行中输入以下命令检查 npm 是否安装成功:

npm -v

你会看到类似 7.20.3 的版本号输出。

安装 Angular CLI

Angular CLI(命令行界面)是一个非常有用的工具,用于初始化、开发和维护 Angular 项目。我们使用 npm 来安装它。在命令行中运行以下命令:

npm install -g @angular/cli

-g 标志表示全局安装,这样在系统的任何位置都可以使用 ng 命令。安装完成后,通过以下命令检查 Angular CLI 是否安装成功:

ng version

你会看到 Angular CLI 的版本信息。

创建 Angular 项目

一切准备就绪后,我们就可以开始创建 Angular 项目了。

使用 Angular CLI 创建项目

打开命令行工具,导航到你希望创建项目的目录。例如,如果你想在 Documents 文件夹下创建项目,可以使用以下命令:

cd Documents

然后,使用 Angular CLI 的 new 命令来创建一个新的 Angular 项目。假设项目名称为 my - app,运行以下命令:

ng new my - app

Angular CLI 会询问你一些配置问题:

  1. 是否使用 Angular 路由:如果你希望项目支持路由功能(例如单页应用中页面间的导航),回答 Yes;否则回答 No
  2. 选择样式表格式:Angular 支持多种样式表格式,如 CSS、SCSS、Less 和 Stylus。你可以根据自己的喜好选择,例如输入 SCSS 选择 SCSS 作为样式表语言。

项目结构

创建完成后,进入 my - app 目录:

cd my - app

项目目录结构如下:

my - app
├── e2e
│   ├── src
│   │   ├── app.e2e-spec.ts
│   │   ├── app.po.ts
│   │   ├── browser - config.ts
│   │   └── environment.ts
│   └── tsconfig.e2e.json
├── node_modules
├── src
│   ├── app
│   │   ├── app.component.css
│   │   ├── app.component.html
│   │   ├── app.component.spec.ts
│   │   ├── app.component.ts
│   │   └── app.module.ts
│   ├── assets
│   ├── environments
│   │   ├── environment.prod.ts
│   │   └── environment.ts
│   ├── favicon.ico
│   ├── index.html
│   ├── main.ts
│   ├── polyfills.ts
│   ├── styles.scss
│   ├── test.ts
│   └── tsconfig.app.json
├──.browserslistrc
├──.editorconfig
├──.gitignore
├── angular.json
├── package - lock.json
├── package.json
├── README.md
└── tsconfig.json
  • e2e 目录:用于端到端(End - to - End)测试相关代码。
  • node_modules 目录:存放项目依赖的所有 Node.js 包。
  • src 目录:项目的源代码目录,包含应用组件、样式、配置等。
    • app 目录:存放应用的组件、模块等核心代码。
    • assets 目录:用于存放静态资源,如图像、字体等。
    • environments 目录:包含不同环境(开发、生产等)的配置文件。
  • .browserslistrc:指定项目支持的浏览器及版本。
  • .editorconfig:定义编辑器的代码风格配置。
  • .gitignore:指定哪些文件和目录不需要被 Git 版本控制系统跟踪。
  • angular.json:Angular 项目的配置文件,包含项目架构、构建选项等。
  • package.json:项目的包描述文件,记录项目的依赖和脚本等信息。
  • README.md:项目的说明文档。
  • tsconfig.json:TypeScript 的配置文件。

运行 Angular 项目

创建好项目后,我们可以运行项目,看看初始效果。

启动开发服务器

my - app 项目目录下,运行以下命令启动开发服务器:

ng serve

这会启动一个本地开发服务器,默认监听 http://localhost:4200/。你可以在浏览器中打开该地址,就能看到初始的 Angular 应用界面,通常是一个欢迎页面,显示 Welcome to my - app!

构建项目

在部署项目到生产环境之前,我们需要构建项目。运行以下命令进行构建:

ng build

构建后的文件会输出到 dist/my - app 目录下。这些文件是优化后的、适合生产环境部署的静态文件。

构建生产版本

为了进一步优化构建输出,我们可以构建生产版本。生产版本会启用各种优化,如压缩代码、移除未使用的代码等。运行以下命令:

ng build --prod

--prod 标志启用生产模式构建。构建完成后,dist/my - app 目录下的文件会更小、更适合部署到生产服务器。

项目配置

Angular 项目的配置主要集中在 angular.jsontsconfig.json 文件中。

angular.json 配置

angular.json 文件包含了项目的各种配置选项,如架构、构建、测试等。

  1. 项目架构配置:在 architect 节点下,build 配置项用于定义构建相关的设置,例如:
"architect": {
    "build": {
        "builder": "@angular - cli:browser",
        "outputPath": "dist/my - app",
        "index": "src/index.html",
        "main": "src/main.ts",
        "polyfills": "src/polyfills.ts",
        "tsConfig": "src/tsconfig.app.json",
        "assets": [
            "src/favicon.ico",
            "src/assets"
        ],
        "styles": [
            "src/styles.scss"
        ],
        "scripts": []
    }
}
- **`outputPath`**:指定构建输出目录。
- **`index`**:指定项目的入口 HTML 文件。
- **`main`**:指定项目的入口 TypeScript 文件。
- **`assets`**:指定需要复制到构建输出目录的静态资源。
- **`styles`**:指定项目的样式文件。

2. 开发服务器配置architect.serve 配置项用于开发服务器的设置,例如:

"serve": {
    "builder": "@angular - cli:dev - server",
    "options": {
        "browserTarget": "my - app:build"
    },
    "configurations": {
        "production": {
            "browserTarget": "my - app:build:production"
        }
    }
}

这里 browserTarget 指向构建配置,表示开发服务器使用的构建配置。

  1. 测试配置architect.test 配置项用于单元测试相关设置,例如:
"test": {
    "builder": "@angular - cli:karma",
    "options": {
        "main": "src/test.ts",
        "polyfills": "src/polyfills.ts",
        "tsConfig": "src/tsconfig.spec.json",
        "karmaConfig": "./karma.conf.js",
        "assets": [
            "src/favicon.ico",
            "src/assets"
        ],
        "styles": [
            "src/styles.scss"
        ],
        "scripts": []
    }
}

tsconfig.json 配置

tsconfig.json 是 TypeScript 的配置文件,定义了 TypeScript 编译的各种选项。

  1. 编译选项:例如:
{
    "compileOnSave": false,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out - tsc",
        "sourceMap": true,
        "declaration": false,
        "downlevelIteration": true,
        "experimentalDecorators": true,
        "module": "esnext",
        "moduleResolution": "node",
        "importHelpers": true,
        "target": "es2015",
        "lib": [
            "es2018",
            "dom"
        ]
    }
}
- **`baseUrl`**:用于解析非相对模块导入的基础路径。
- **`outDir`**:指定编译后的 JavaScript 文件输出目录。
- **`sourceMap`**:生成 source map 文件,方便调试。
- **`module`**:指定生成的模块系统,`esnext` 表示使用 ECMAScript 模块。
- **`target`**:指定编译目标的 ECMAScript 版本。

2. 包含和排除文件includeexclude 选项用于指定哪些文件参与编译和排除哪些文件,例如:

"include": [
    "src/**/*.ts"
],
"exclude": [
    "node_modules",
    "**/*.spec.ts"
]

这里 src/**/*.ts 表示包含 src 目录下所有的 TypeScript 文件,node_modules 和所有以 .spec.ts 结尾的文件被排除。

自定义项目初始化模板

如果你经常创建具有特定结构或配置的 Angular 项目,你可以创建自定义的项目初始化模板。

创建自定义模板

  1. 创建基础项目:首先,按照常规方式创建一个 Angular 项目,作为模板的基础。例如:
ng new template - base
  1. 配置模板项目:在 template - base 项目中,进行你想要的配置修改,如添加特定的组件、模块,配置样式等。例如,添加一个自定义组件:
ng generate component my - custom - component
  1. 打包模板:使用 ng new 命令的 --collection 选项将项目打包成模板。在 template - base 项目目录下运行:
npm pack

这会生成一个类似于 template - base - 0.0.1.tgz 的压缩包。

使用自定义模板

  1. 安装模板:将生成的压缩包移动到你希望使用模板的目录,然后使用 npm 安装:
npm install template - base - 0.0.1.tgz
  1. 使用模板创建项目:运行 ng new 命令,并指定 --collection 为你安装的模板包名,例如:
ng new my - new - app --collection=template - base

这样创建的 my - new - app 项目就会基于你自定义的模板结构和配置。

常见问题及解决方法

在创建和运行 Angular 项目过程中,可能会遇到一些问题。

依赖安装问题

  1. 网络问题:如果在安装 npm 依赖时遇到网络问题,例如下载速度慢或失败,可以尝试使用国内的 npm 镜像源,如淘宝镜像。运行以下命令切换到淘宝镜像:
npm config set registry https://registry.npm.taobao.org

安装完成后,可以切换回官方镜像:

npm config set registry https://registry.npmjs.org
  1. 版本冲突:有时依赖包之间可能存在版本冲突,导致安装失败。可以尝试使用 npm install --force 命令强制安装,但这可能会带来潜在问题,建议先查看错误信息,尝试手动解决版本冲突。例如,如果某个包 A 依赖包 B 的版本 X,而另一个包 C 依赖包 B 的版本 Y,可以尝试升级或降级相关包,使它们的依赖版本兼容。

构建问题

  1. TypeScript 编译错误:如果构建时出现 TypeScript 编译错误,首先查看错误信息,通常错误信息会指出错误发生的文件和位置。例如,可能是类型不匹配、未定义的变量等问题。检查代码,确保类型声明正确,变量和函数在使用前已定义。
  2. 样式加载问题:如果样式没有正确加载,检查 angular.jsonstyles 配置项是否正确指定了样式文件路径。同时,确保样式文件中的选择器和 HTML 中的元素匹配。

运行问题

  1. 开发服务器启动失败:如果开发服务器启动失败,可能是端口被占用。可以使用命令查看占用端口的进程,例如在 Windows 下使用 netstat -ano | findstr :4200 找到占用端口 4200 的进程 ID,然后使用 taskkill /F /PID <进程 ID> 杀死该进程,再重新启动开发服务器。
  2. 页面显示空白:如果页面显示空白,检查浏览器控制台是否有错误信息。可能是 JavaScript 错误导致应用无法正常渲染。同时,检查 index.html 文件中是否正确引入了构建后的脚本和样式文件。

通过以上详细步骤和内容,你应该能够顺利创建、配置和运行一个 Angular 项目,并解决常见的问题。在实际开发中,随着项目的不断扩展,你可以进一步深入学习 Angular 的各种特性和高级用法,以打造更强大、高效的前端应用。例如,学习组件的生命周期钩子函数,能让你更好地控制组件的创建、更新和销毁过程;深入理解模块的作用,有助于你更好地组织项目代码结构,提高代码的可维护性和复用性。同时,随着 Angular 的不断发展,关注官方文档的更新,及时掌握新特性和最佳实践,能让你的开发工作更加得心应手。在与后端交互方面,Angular 提供了强大的 HTTP 客户端模块,通过它你可以轻松地与后端 API 进行数据交互,实现数据的增删改查等操作。此外,Angular 的路由系统能帮助你构建单页应用中流畅的页面导航,为用户提供更好的体验。掌握这些知识和技能,将为你在前端开发领域带来更广阔的发展空间。

继续深入了解 Angular 的表单处理,无论是模板驱动表单还是响应式表单,都能让你高效地处理用户输入数据。模板驱动表单简单直观,适合快速开发小型表单;而响应式表单则更加灵活和可扩展,适合处理复杂的表单场景。在性能优化方面,Angular 提供了多种手段,如使用 OnPush 变更检测策略,可以在特定情况下减少不必要的组件检查,提高应用的性能。还可以通过代码拆分和懒加载模块等技术,优化应用的加载时间,特别是对于大型应用来说,这些优化手段至关重要。在组件通信方面,父子组件通信、兄弟组件通信以及跨层级组件通信都有相应的实现方式,熟练掌握这些能让你更好地构建组件化的应用架构。对于单元测试和端到端测试,Angular 也提供了完善的工具和框架,如 Karma 和 Protractor,编写测试用例可以保证代码的质量和稳定性,提高项目的可维护性。随着前端技术的不断发展,Angular 也在持续演进,与其他前端框架和技术的融合也成为趋势,了解这些趋势能让你在技术选型和项目架构设计上做出更明智的决策。在实际项目中,结合实际需求合理运用 Angular 的各种特性和技术,将有助于打造出高质量、高性能的前端应用程序。

当项目逐渐变大,代码的组织和管理变得尤为重要。Angular 鼓励使用模块化的设计思想,将相关的功能封装在不同的模块中。例如,你可以创建一个 SharedModule 来存放应用中共享的组件、管道和指令,这样可以提高代码的复用性。在模块之间的依赖管理上,要遵循合理的依赖倒置原则,避免模块之间出现复杂的循环依赖关系。对于组件的设计,要尽量遵循单一职责原则,每个组件只负责一项明确的功能,这样可以提高组件的可测试性和可维护性。在数据管理方面,随着应用复杂度的增加,使用状态管理库如 Redux 或 NgRx 可能是一个不错的选择,它们可以帮助你更好地管理应用的状态,使数据流动更加清晰和可预测。在处理国际化(i18n)和本地化(l10n)需求时,Angular 提供了相应的工具和机制,通过配置和使用翻译文件,可以轻松实现应用的多语言支持。另外,在安全方面,要注意防范常见的前端安全漏洞,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等,Angular 提供了一些内置的安全机制和最佳实践来帮助你构建安全的应用。在部署方面,除了传统的服务器部署方式,还可以考虑使用容器化技术如 Docker 来打包和部署 Angular 应用,结合容器编排工具如 Kubernetes,可以实现应用的高效部署、扩展和管理。总之,通过不断学习和实践,深入掌握 Angular 的各种技术和理念,你将能够应对各种复杂的前端开发场景,打造出优秀的前端应用。