news 2026/9/10 19:48:24

Cypress 仓库中 Angular CLI 21 未配置工程的完整工作流:从 `ng serve` 到 `ng e2e` 实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cypress 仓库中 Angular CLI 21 未配置工程的完整工作流:从 `ng serve` 到 `ng e2e` 实战解析

Cypress 仓库中 Angular CLI 21 未配置工程的完整工作流:从ng serveng e2e实战解析

【免费下载链接】cypressFast, easy and reliable testing for anything that runs in a browser.项目地址: https://gitcode.com/GitHub_Trending/cy/cypress

Angular CLI 是创建、开发、构建与测试 Angular 应用的标准命令行工具,其生成的每个新工程都会自带一份官方 README,按「开发服务器 / 代码脚手架 / 构建 / 单元测试 / 端到端测试 / 附加资源」的脉络,交代该工程的全部日常操作命令。本篇技术指南以 Cypress 仓库内system-tests/projects/angular-cli-unconfigured这个真实夹具工程(由 Angular CLI 21.2.7 生成)为蓝本,逐条解读这份 README 中的命令与配置,并对照仓库源码(angular.jsonpackage.json、应用源码与测试文件)还原每条命令背后的构建器、默认配置与产物位置。读完本文,你将掌握:如何在一个全新的 Angular CLI 工程中启动开发服务器、生成代码、构建产物、用 Vitest 跑单测,以及「未配置(unconfigured)」的工程在端到端测试阶段如何与 Cypress 生态衔接。

一、工程概览:angular-cli-unconfigured在仓库中的角色

该夹具位于 system-tests/projects/angular-cli-unconfigured,其 README.md 开头自述:This project was generated using Angular CLI version 21.2.7。也就是说,它是一份由ng new生成的、未经任何手工改写的标准 Angular 21 工程。

目录名中的unconfigured(未配置)可以从两方面印证:

  • 整个工程目录下不存在cypress.config.tscypress.config.jscypress/目录,属于「Cypress 尚未接入」的原始状态;
  • 它与system-tests/projects下的angular-21angular-22angular-signalsangular-custom-configangular-custom-root等夹具并列(见 system-tests/projects),后者会被 system-tests/test/component_testing_spec.ts 中的Angular CLI versions用例与angular 21 custom configangular signals等用例直接引用——因此从源码结构看,angular-cli-unconfigured是 Cypress 系统测试体系中用来代表「刚用 Angular CLI 生成、尚未接入任何 E2E 框架」的基准工程样本,用于验证 Cypress 对这类工程的可探测性与接入流程。

工程的静态骨架由以下文件构成:

  • angular.json —— 工作区/构建器配置;
  • package.json —— npm/yarn 脚本与依赖清单;
  • src/main.ts —— 应用引导入口;
  • src/app/app.ts —— 根组件(Angular 17+ 的 standalone 写法);
  • src/app/app.html —— 根组件模板;
  • src/app/app.spec.ts —— 单元测试示例;
  • src/index.html 与 src/styles.css —— 页面外壳与全局样式。

依赖方面(package.json)显示其运行时依赖为@angular/core@angular/common@angular/compiler@angular/forms@angular/platform-browser@angular/router(均^21.2.0),开发依赖包含@angular/cli@angular/build@angular-devkit/build-angular^21.2.7)、typescript ~5.9.2jsdom ^28.0.0vitest ^4.0.8,包管理器固定为yarn@1.22.22。下面按 README 的章节顺序展开各条命令。

二、启动开发服务器:ng serve与构建器@angular/build:dev-server

README「Development server」一节给出的命令是:

ng serve

并说明:服务器启动后,浏览器访问http://localhost:4200/任何源文件修改都会触发应用自动重载(hot reload)

对照 angular.json 第 55–66 行,serve目标的架构(architect)配置为:

"serve": { "builder": "@angular/build:dev-server", "configurations": { "production": { "buildTarget": "angular-cli-unconfigured:build:production" }, "development": { "buildTarget": "angular-cli-unconfigured:build:development" } }, "defaultConfiguration": "development" }

几个值得注意的实现细节:

  • 默认开发配置defaultConfigurationdevelopment,即直接运行ng serve时使用开发配置;如需模拟生产形态可执行ng serve --configuration production
  • 开发配置的编译差异(同文件第 47–52 行):optimization: false(不做压缩优化)、extractLicenses: falsesourceMap: true(开启源码映射,便于调试)。这正是热重载快速生效、报错堆栈可读的原因。
  • 两个构建目标serve本身不直接持有编译参数,而是通过buildTarget委托给同工程的build:production/build:development目标——这是 Angular 21 基于 application builder 的新式 dev-server 的典型结构。
  • 入口为 src/main.ts:它调用bootstrapApplication(App, appConfig)以 standalone 方式引导根组件App(见 src/app/app.ts,该组件以templateUrl引用 src/app/app.html,并用signal('angular-cli-unconfigured')声明了页面标题数据)。

三、代码脚手架:ng generate与可用的 schematics

Angular CLI 内置强大的代码生成(scaffolding)能力,README「Code scaffolding」一节给出了两个命令:

ng generate component component-name

用于生成一个新组件;以及:

ng generate --help

用于列出全部可用的 schematics(如componentsdirectivespipes等)。

结合本工程的 angular.json:

  • 第 12 行"schematics": {}表明该工程没有覆盖任何生成器默认值,所有ng generate均按 Angular CLI 全局默认规则执行;
  • 第 14 行"prefix": "app"定义了组件/指令选择器前缀,因此生成的选择器形如app-xxx
  • 第 7 行"newProjectRoot": "projects"说明若在应用外生成库等项目会落到projects/目录。

此外,package.json 的脚本区包含"ng": "ng",因此在工程内可直接运行yarn ng generate component ...(angular.json 第 4–6 行也把默认包管理器固定为yarn),效果与直接调用ng一致。

四、生产构建:ng build与资源预算(budgets)

README「Building」一节给出的命令:

ng build

它会把工程编译并输出到dist/目录;README 特别说明:默认的生产构建会对应用做面向性能与速度的优化

这条描述对应的配置在 angular.json 中非常具体:

  • 第 16–30 行:build目标使用@angular/build:application构建器,入口browsersrc/main.ts,TS 配置为tsconfig.app.json,静态资源来自public/glob: "**/*",本工程中仅含public/favicon.ico),全局样式为src/styles.css
  • 第 31–46 行production配置:
    • budgets体积预算——initial(首包)超过500 kB 告警 / 1 MB 报错anyComponentStyle(任意组件样式)超过4 kB 告警 / 8 kB 报错
    • outputHashing: "all"——对产物文件名做哈希,便于浏览器缓存更新;
    • 默认配置即production(第 53 行defaultConfiguration),所以直接执行ng build走的就是上述优化路径。

dist/是 Angular CLI 的约定输出目录,产物(含带哈希的 JS/CSS 与index.html)都生成于此。若需带源码映射的开发版中间产物,可执行ng build --configuration development(对应 package.json 中的"watch": "ng build --watch --configuration development"脚本,用于持续监听重建)。

五、单元测试:ng test与 Vitest 运行器

README「Running unit tests」一节说明:工程的单元测试由Vitest运行器执行,命令为:

ng test

工程中的对应证据包括:

  • package.json 的 devDependencies 中显式包含"vitest": "^4.0.8""jsdom": "^28.0.0"(jsdom 提供浏览器 DOM 环境),脚本区定义了"test": "ng test"
  • angular.json 第 67–69 行的test目标直接指向@angular/build:unit-test构建器——这是 Angular 21 中 Vitest 被纳入官方 application builder 生态的体现;
  • 测试源码见 src/app/app.spec.ts:通过TestBed.configureTestingModule注册App组件,用例一断言fixture.componentInstance可创建(expect(app).toBeTruthy()),用例二在whenStable()后断言页面h1文本包含Hello, angular-cli-unconfigured——与 src/app/app.html 中<h1>Hello, {{ title() }}</h1>的模板完全对应,验证了 signal 数据能正确渲染到 DOM。

配套的 tsconfig.spec.json 为该测试入口提供类型与编译环境。对使用者而言,在仓库或本地同名工程中执行yarn test即可跑出上述用例结果。

六、端到端测试:ng e2e与未配置工程的 Cypress 接入点

README「Running end-to-end tests」一节给出了最后一条命令:

ng e2e

并强调了两点事实:Angular CLI 默认不捆绑任何 E2E 测试框架,需要开发者自行选择适合的方案。

这正是「unconfigured」工程的关键分界点。对 E2E 需求而言,接入 Cypress 是自然选择,而当前仓库恰好提供了完整的接入配套:

  • npm/cypress-schematic/README.md 展示了通过 Angular CLI schematic 为工程加入 Cypress 的方式:安装后该 schematic 会被注册进 Angular CLI 的default schematic collections,此后即可直接执行对应的 CLI 命令而无需带包名前缀,实现ng e2e一键驱动 Cypress;
  • npm/angular 等包则为 Angular 组件的mount / 组件级测试提供支撑,与 Cypress 的组件测试模式配合;
  • 在系统测试层,system-tests/test/component_testing_spec.ts 中describe('Angular CLI versions')按版本循环指向angular-${version}夹具工程,并分别覆盖angular 21 custom configangular custom rootangular signals等形态——这些用例共同验证 Cypress 在不同 Angular CLI 工程变体(含 custom config、custom root、signals 等)下的组件测试能力。

因此,针对angular-cli-unconfigured这类「未配置」工程,可预期的落地流程是:先用ng serve开发验证,用ng generate快速产出页面,用ng build出生产包、ng test守住单测,最后借助 Cypress 的 schematic/集成能力补齐ng e2e链路,把端到端回归纳入同一工作流。README 之所以专门提示「choose one that suits your needs」,正是因为在 Angular CLI 生态里 E2E 框架是插拔式的——而 Cypress 即是被本仓库完整实现与验证的选项之一。

七、更多学习资源与延伸阅读

README 末尾「Additional Resources」指向 Angular CLI 的 Overview 与 Command Reference 页面(Angular 官方文档中收录完整的命令参考)。若想在本仓库内继续深入,建议按以下路径对照研读:

  • 工程全貌:system-tests/projects/angular-cli-unconfigured,重点看 angular.json 与 package.json;
  • 应用源码:src/app/app.ts、src/app/app.html 与单元测试 src/app/app.spec.ts;
  • Cypress 侧接入:npm 生态的 cypress-schematic README 以及 angular 集成包(如存在);
  • 系统测试验证矩阵:system-tests/test/component_testing_spec.ts 中所有angular前缀用例,以及 system-tests/projects 下的angular-21angular-signalsangular-custom-config等同族夹具,便于横向比对「已配置」与「未配置」工程的差异。

【免费下载链接】cypressFast, easy and reliable testing for anything that runs in a browser.项目地址: https://gitcode.com/GitHub_Trending/cy/cypress

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 19:43:47

【JAVA毕业设计】基于 SpringBoot 的小区停车场信息化管理平台的设计与实现 基于 SpringBoot+Vue 技术的小区智能停车管理系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/10 19:43:34

CANN/GE图引擎Operator构造函数

Operator构造函数和析构函数 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch…

作者头像 李华
网站建设 2026/9/10 19:43:25

复杂工程AI代码助手实战指南:工业级安全、合规与可靠性验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 19:43:21

PLC自动化改造提升车间运料小车效率

1. 车间运料小车的自动化改造背景在传统制造业车间里&#xff0c;物料搬运一直是个让人头疼的问题。我见过太多车间使用老式运料小车&#xff0c;要么需要工人手动推拉&#xff0c;要么就是那种"半自动"的小车——说是自动&#xff0c;实际上动不动就卡住、跑偏或者干…

作者头像 李华
网站建设 2026/9/10 19:43:12

怀化AI短视频制作服务全面解析

来源&#xff1a;唐sirAI&#xff08;www.tangsir.cc&#xff09; | 电话&#xff1a;18874530691━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━随着AI技术的飞速发展&#xff0c;怀化AI短视频已经成为怀化本地企业数字化营销的重要趋势。…

作者头像 李华
网站建设 2026/9/10 19:42:47

从MCP到MHS:当AI协议延伸至物理世界的边缘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华