CodeX:Angular项目性能优化实例分享
最近在尝试使用AI Agent优化项目,选用了性价比比较高的CodeX(咸鱼20元/月) 结合我自己在对话式AI方面的使用思路,分享一下我优化项目的完整流程。 AI模型: GPT 5.3 Codex , 思考程度超高 注1 :CodeX对话框里的文本我会用且只用引用来展示,例如: 请帮我写一个helloworld程序
最近在尝试使用AI Agent优化项目,选用了性价比比较高的CodeX(咸鱼20元/月)
结合我自己在对话式AI方面的使用思路,分享一下我优化项目的完整流程。
AI模型:GPT-5.3-Codex,思考程度超高
注1:CodeX对话框里的文本我会用且只用引用来展示,例如:
请帮我写一个helloworld程序
以下是这个程序的代码:
……
注2:由于项目是在虚拟机环境中运行,打包时间仅供参考(内存性能低)
分析项目结构,提取优化思路
我其实对于项目的优化思路是很清晰的,但是我希望AI能够帮我细化和补全,所以我”抛砖引玉“了一下
你是一位精通 Angular20、前端工程化、性能优化、构建优化和项目架构整理的高级前端工程师。
请先完整浏览我当前项目的结构、路由、页面组织方式、公共模块、共享组件、样式入口、构建配置以及主要依赖,然后只做分析和建议,不要直接修改代码,不要创建文件,不要删除文件,不要执行重构。
我希望你基于当前项目实际情况,重点从以下几个方向评估优化空间。
- 提升页面和组件的加载速度。
- 提升项目启动速度和打包速度。当前打包时间大约在60到90秒,我希望进一步缩短。
- 提升代码复用性,减少重复实现。
- 优化项目结构和整体逻辑,让后续维护更清晰。
- 补充你认为值得做、但我暂时没有想到的优化点。
执行要求如下。
- 先完整浏览项目,再输出结论,不要在还没看清结构前就直接下判断。
- 不要直接执行任何优化,只做梳理、分析和建议。
- 请结合项目中的真实情况给建议,不要只给通用型前端优化建议。
- 建议要尽量有优先级,不要杂乱罗列。
- 每一条建议单独列出,并简单说明:
- 当前问题是什么。
- 你准备怎么优化。
- 这样做主要能提升什么。
- 是否有改动风险或注意事项。
- 如果你发现某些问题影响特别大,请明确标注为高优先级。
- 如果项目中存在明显的性能瓶颈、结构问题、安全隐患、打包异常点或者不合理依赖,也请一起指出。
- 这一步只要给建议和思路,不要开始改代码。
最后请按下面格式输出。
- 你对当前项目现状的总体判断。
- 你发现的关键问题。
- 优化建议清单,按优先级从高到低逐条列出。
- 每条建议的简要做法和预期收益。
- 如果要真正落地,请再补充一个合理的分阶段实施顺序,但此时仍然不要执行。
AI在跑了差不多半个小时后给出的方案如下
我觉得整体还是没太大问题的。
我已经把项目结构和关键链路梳理了一遍,并做了实测构建分析(未改代码)。关键结论是:现在几乎所有业务页面都被打进了首包。
已确认的现状(依据):
路由是静态聚合方式,app.routes 把各业务 ...Routes 直接展开(app.routes.ts)。
各业务 route 文件继续静态 import 组件并 component: 直连(如 planmanage.route.ts)。
生产构建实测约 60.8s,Initial total 6.67MB(raw),main 4.36MB;stats 在 stats.json。
main 中包含 286 个 pages ts 文件(基本等于全量业务页面)。
全局样式较重:全量引入 ng-zorro less(theme.less)。
TableShareModule 被大量页面复用且导出范围很大(table-share.ts)。
ConfigService 里有硬编码 baseUrl(config-service.ts)。
存在固定密钥(app.ts、login.ts)。
优化建议(按优先级,一个一个来):
- 路由改为真正懒加载(目标1/2/4):把顶层 children: [...xxxRoutes] 改成 loadChildren,把业务路由里的 component 改 loadComponent,先从低频模块开始拆。
- 重依赖按页面动态加载(目标1/2):echarts/quill/html2canvas 不进首包;例如把 quality-report.ts 的 html2canvas 改为点击导出时 import()。
- ECharts 改为按需 core 版(目标1/2):从 import * as echarts from 'echarts' 改为 echarts/core + 必需图表/组件注册,可明显降包体。
- 拆分 TableShareModule(目标1/3/4):按“表格/表单/详情/上传/图表”拆成小共享模块,页面只引入需要的模块。
- 精简全局样式入口(目标1/2):评估从全量 less 改为预编译 CSS 或按需主题,quill.snow.css 从全局移到富文本页面加载(styles.css)。
- 收紧图标资源策略(目标1/2):当前 assets 复制了大量 ant icon 文件(angular.json assets 配置),改为“仅注册使用到的图标”或白名单拷贝。
- 建立字典数据缓存层(目标1/3):供应商/渠道/品类 等下拉接口用 shareReplay + TTL 缓存,避免每页重复请求。
- 统一订阅释放与状态流(目标1/3/4):逐步把手写 subscribe 改为 async pipe / takeUntilDestroyed,减少内存泄漏和重复副作用。
- 精简 App 根组件副作用(目标1/4):合并 app.ts 和 app.ts 两套路由订阅,避免重复执行 checkUnread/checkDomainAndApi。
- 配置分环境治理(目标2/4):引入 environment + fileReplacements,把 baseUrl/开关从业务服务中抽离。
- 减少 CommonJS 负担(目标1/2/3):lodash 改 lodash-es 按函数引入,crypto-js 只引 AES 子集或逐步迁 Web Crypto。
- 建立性能护栏(目标2/5):把 budget 从 10MB 收紧到可控阈值,并把 stats.json 分析接入 CI,防止回归。
- 强化可复用与类型化(目标3/4):服务层从 Observable
- 补齐自动化保障(目标5):目前 spec 很少,建议先加“路由懒加载 smoke test + 核心页面渲染测试 + 关键接口契约测试”。
如果你愿意,我下一步可以给你一份“分三阶段落地顺序(每阶段改哪些文件、预期收益、风险点)”的实施清单。
其中我对于我不太清楚不太熟悉的点进行了进一步询问
最终确定了1-7、9-11方案,并让AI生成了一份优化清单:
分阶段落地顺序清单(仅含 1-7、9-11)
阶段1:底座整理(1-2天)
覆盖:#10 #9
动作:先做 environment 分环境配置,移除 ConfigService 硬编码地址;合并 App 里重复的路由事件订阅与重复副作用调用。
验收:功能无回归,开发/测试/生产环境切换正常,首页初始化逻辑不重复执行。阶段2:路由拆包(2-4天)
覆盖:#1
动作:顶层路由改 loadChildren,业务路由改 loadComponent/loadChildren,先拆 planmanage/purchase/mic 这类大模块。
验收:首屏只加载壳层和当前模块代码,非当前业务页不进首包。阶段3:重依赖延迟加载(2-3天)
覆盖:#2 #3
动作:把 echarts/quill/html2canvas 从静态引入改成页面或操作触发时动态引入;ECharts 切到 echarts/core 按需注册图表与组件。
验收:main 和大公共 chunk 明显下降,图表页/富文本页按需加载正常。阶段4:样式与图标瘦身(1-2天)
覆盖:#5 #6
动作:减少全局样式入口负担(尤其全量 zorro less、全局 quill 样式);图标资源改白名单策略,仅保留实际使用图标。
验收:styles 体积下降,assets 文件数和体积下降,UI 外观保持一致。阶段5:复用与结构优化(3-5天)
覆盖:#4 #7
动作:拆分 TableShareModule/DetailShareModule 为小粒度共享模块;新增字典/下拉统一缓存服务(供应商、渠道、品类等)。
验收:页面 import 更精简,重复请求减少,公共逻辑集中。阶段6:依赖治理收尾(1-2天)
覆盖:#11
动作:lodash 改按函数引入(或 lodash-es),crypto-js 仅保留必要能力或替换到更轻方案。
验收:CommonJS 依赖影响下降,包体与构建时间进一步收敛。
我觉得没什么问题,就直接开始了阶段一优化
阶段一:底座整理,合并事件订阅
阶段一的具体优化为
阶段1已完成,已按你确认的范围先落地了两项核心优化(对应我们清单里的 #9、#10):
配置环境化(去硬编码)
新增环境文件并接入开发环境替换:
environment.ts
environment.development.ts
environment.model.ts
在 angular.json 增加 development 的 fileReplacements
config-service.ts 改为从 environment 读取 apiBaseUrl/imgBaseUrl
根组件路由订阅去重与逻辑收敛
app.ts 合并重复的 router.events 监听,统一到 handleNavigationEnd 处理,减少重复执行和维护成本
域名/API 映射、旧系统跳转、测试环境判断等常量改为环境配置读取
顺手消除少量图片域名硬编码(提升复用性)
dialog-form.ts
package-info-archives.ts
trademark-packing-detail.ts
验证结果:
npm run build(生产构建)通过
npx ng build --configuration development(开发构建)通过
其中因为修改了打包环境,测试环境和生产环境的运行逻辑变了,通过进一步确认
我之后将会摒弃较为麻烦的“注释/启动测试API或生产API”来切换测试区和正式区
而是通过指令进行环境切换,例如:
npm run start:test -运行测试环境,也可写作npm run st
npm run start:prod -运行正式环境,也可写作npm run sp
npm run build:test -打包测试环境,也可写作npm run bt
npm run build:prod -打包正式环境,也可写作npm run bp
然后我让AI使用命令进行性能测试,将优化前后的差距用数值显现出来:
指标 优化前 优化后 变化 Initial total(Raw) 6.67 MB 2.31 MB -65.37% Initial transfer(估算) 1.18 MB 454.25 kB -61.50% main chunk(Raw) 4.36 MB 13.96 kB -99.69% 构建耗时(production) 105.948 s 104.860 s(多次波动 85~105s) 无稳定显著下降
阶段二:路由拆包,实现懒加载
已完成,这一步我把“所有父模块路由”都做了懒加载优化。
顶层父路由(一级)
- 已全部使用 loadChildren:app.routes.ts
各业务模块子路由(二级页面)
已把 component: Xxx 全量改为 loadComponent(按页面懒加载)。
这次共转换 233 处 loadComponent。
关键改动覆盖文件(全部已改):
aftersales.route.ts
business.route.ts
channelmanage.route.ts
customer-service.route.ts
dashboard.route.ts
devmanage.route.ts
login.route.ts
logisticsplan.route.ts
mic.route.ts
planmanage.route.ts
productionmanage.route.ts
project.route.ts
purchase.route.ts
sales.route.ts
sales-analysis.route.ts
supplier.route.ts
systemauth.route.ts
tools.route.ts
transfer.route.ts
vip.route.ts
warehousing.route.ts
构建验证
npx ng build --configuration development 通过
npm run build 通过
效果说明
首屏资源继续保持轻量(生产构建 Initial total 约 2.31MB)。
懒加载粒度进一步细化为“页面级”,进入某业务模块时不再一次性拉整包页面。
打包耗时不一定显著下降(这类改造主要提升运行时加载体验,不是主要加速构建时间)。
路由方面的优化不会体现在打包中,而是系统的实际运行环境,所以我自己简单测试了一下优化前后的区别:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 初次加载页面体感速度 | 2-4s | 1s内 |
| LCP(最大内容绘制) | 4.79s | 2.38s |
阶段三:npm包重依赖延迟加载
这一步其实跟懒加载有点相似,但是实现方式有区别。
js包使用的时候便调用并下载,没有使用的时候就完全不引入,可以降低打包体积、提升打包速度。
阶段三已继续并完成,我把“优化前/后”都做了同机同环境采样,并保留了对比数据文件。
本次已落地
- echarts 静态导入改为按需加载(含 provider 和 echarts.init 场景)。
- html2canvas 改为函数内动态 import(),仅导出/截图时加载。
- 移除 crypto-js 运行时静态依赖,改为轻量实现,并补了解密失败兜底解析。
- 去掉全局 provideQuillConfig,避免把 ngx-quill 挤进首包。
- GeneralService 去掉 date-fns 依赖,改为本地日期格式化。
- app/config/auth/general 增加 JSON 安全解析,避免 decrypt 失败直接崩。
优化前后的结果如下:
对比:
- Initial total:2.31 MB -> 2.21 MB,减少 105,056 bytes(-4.54%)
- Estimated transfer:454.25 kB -> 424.37 kB,减少 29.88 kB(-6.58%)
- main chunk:13.96 kB -> 13.75 kB,减少 0.21 kB(-1.50%)
- 构建耗时:59.377s -> 57.275s,减少 2.102s(-3.54%)
依赖级证据(首包):
- crypto-js: 71,082 -> 0 bytes
- date-fns: 20,026 -> 0 bytes
- ngx-quill: 13,563 -> 0 bytes
页面级证据:
- quality-report 入口 chunk:221,682 -> 18,303 bytes(-91.74%)
- 新增独立 html2canvas chunk:203,117 bytes(仅触发截图/导出时下载)
构建耗时这个有点牵强了,毕竟2秒属于常规误差内,但打包体积,确实是明显下降了。
阶段四:样式与图标瘦身
在项目初步阶段的时候,因为ng-zorro的配置问题我是静态导入了所有图标,包括了没有使用的。
所以这一步优化重点在于删除未使用过的图标,以及未使用过的样式:
“样式与图标瘦身”这一步我已经继续做完并通过构建验证。
已落地改动
图标资产从全量拷贝改为仅拷贝 svg(去掉无用 js 资产)
quill.snow.css 从全局移除,改为富文本页面按需运行时注入
清理了一个未使用的 QuillModule 引用(limited-time-detail.ts)
关键文件:
- angular.json
- styles.css
- quill-style-loader.ts
- supplier-enquiry-detail.ts
- goods-bom.ts
- blog-detail.ts
- limited-time-detail.ts
优化前后对比
这一步的体积变化(前后对比)
- styles:655.99 kB -> 631.75 kB(减少 24.24 kB)
- Initial total:2.21 MB -> 2.18 MB(约减少 0.03 MB)
- Estimated transfer:424.30 kB -> 421.34 kB(减少 2.96 kB)
- dist/.../assets 文件数:1672 -> 838(减少 834,-49.88%)
- dist/.../assets 总大小:2,213,587 -> 1,534,277 bytes(减少 679,310 bytes,-30.69%)
阶段五:复用与结构优化
这一步是为了优化代码结构,将页面完全相同的代码和逻辑提取出来作为一个公共写法。
然而AI的优化方案虽然可行,但在优化过程中幻觉逐步增强,开始出现不存在的写法、没必要的写法、更复杂的写法。
这一步的本质是提升代码复用性,将公共代码提取出来,用更少的代码实现更多的相似逻辑,然而修改前后代码量几乎没变,甚至写法更复杂,易读性更差了。
于是在进行三次之后我回滚了代码,准备在后续编写一套完整的提示词和优化方案去实现。
并且代码复用主要提升的是开发规范和逻辑,对于性能提升较小。
阶段六:依赖治理收尾和检查
已完成这轮“依赖治理收尾”并产出报告。
执行结果
lodash:已将整包导入改为按函数路径导入(lodash/toInteger、lodash/clone、lodash/size)。
crypto-js:已从依赖中移除 crypto-js 与 @types/crypto-js。
已完成构建与编码校验:
npx ng build --configuration development 通过
npx ng build --configuration production --stats-json 通过
npm run check:encoding 通过(UTF-8 无 BOM)
数据对比(优化前 vs 优化后)lodash 整包导入数:11 -> 0
lodash 按函数导入数:0 -> 12
crypto-js 直接依赖数:1 -> 0
crypto-js 代码引用数:0 -> 0
CommonJS 警告数:0 -> 0
开发构建耗时:67.561s -> 65.538s(约 -2.99%)
生产构建耗时:
优化前:82.343s
优化后多次:99.021s / 90.986s / 84.794s / 84.932s
后两次稳定均值:84.863s
生产初始包体:2.18 MB -> 2.18 MB生产初始传输体积:421.64 kB -> 421.62 kB
对于打包的时长以及体积没有明显变化,但或许在未来引入包变多、变杂之后会有一定提升。
阶段七:保留懒加载 + 主动预取(hover/idle 预加载)
CodeX所做的懒加载优化,只有最普通的懒加载,虽然首屏速度加快了,但每次需要进入页面的时候点击一下都会有明显的卡顿,所以我还想再做一个主动预取。
又因为我们的ERP系统因为每个人的菜单会根据权限实时变化,如果优先加载用户已有的菜单,会比直接全局主动预取更加有优势。
你是一位精通 Angular20与ERP系统的高级前端工程师。
在当前 Angular20 项目中实现保留懒加载加主动预取。
要求如下。
- 保留现有 lazy load,不改成全量加载。
- 增加 idle 预取,进入系统后空闲时自动预取未加载页面。
- 增加 hover 预取,鼠标移入菜单项时预取对应页面。
- 优先只预取当前权限内菜单页面。
- 权限判断结合现有 getViewedMenuList 相关逻辑处理。
- 如果当前结构无法做到权限限定预取,就退化为全局主动预取,并说明原因。
- 处理好退出登录和切换账号后的预取状态重置。
- 最小改动实现,不要重构无关代码。
最后只输出:
- 实现结果。
- 修改文件。
- 关键点。
- 验证情况。
CodeX的输出结果
已完成,实现结果是:
保留现有懒加载不变。
新增“主动预取”两种触发:
idle 触发:进入系统后空闲时自动预取。
hover 触发:鼠标移到菜单项时提前预取对应模块。
实现了“仅预取权限内菜单页面”:
预取权限来源于登录后已过滤的 navigation(即你当前账号可见菜单)。
只会把这些菜单 URL 的父路由前缀加入预取白名单。
非权限菜单不会被主动预取。
兜底:若权限列表异常为空,则回退为全量预取(避免功能失效)。
改动文件src/app/services/permission-aware-preloading.strategy.ts
src/app/app.config.ts
src/app/app.ts
src/app/app.html
关键点withPreloading(PermissionAwarePreloadingStrategy) 已接入路由。
loadUserAndMenuData() 后同步权限菜单到预取策略。
菜单链接增加 (mouseenter)="onMenuLinkHover(chil)"。
退出登录会重置预取状态,避免不同账号权限串用。
验证结果npx ng build --configuration development 构建通过。
npm run check:encoding 通过(UTF-8 无 BOM)。
进入项目,确认实现了懒加载+主动预取。
最终阶段:全量验收、风险排查与优化收尾
这一阶段就没有必要继续大改代码了,我想做的优化基本都完成了。
所以这一步的核心目标不是“继续优化”,而是确认前面做过的优化有没有留下问题、有没有回归、有没有遗漏,以及现在这个项目到底处于什么状态。
你是一位精通 Angular20、前端性能优化、工程化治理、回归检查和项目收尾验收的高级前端工程师。
当前项目已经完成了多轮优化,我现在不希望你继续盲目新增优化,而是希望你站在“最后阶段收尾检查”的角度,对整个项目做一次系统性的验收、排查和总结。
本轮的目标不是继续大改代码,而是确认以下事情。
- 之前已经完成的优化是否真实生效。
- 这些优化有没有带来功能回归、结构混乱、潜在 bug 或隐藏风险。
- 当前项目是否还存在明显可以顺手收尾的小问题。
- 整个优化过程是否已经达到一个适合暂时收尾的状态。
你需要重点检查我已经完成的这些阶段。
- 阶段一,环境配置治理和根组件副作用整理。
- 阶段二,路由拆包和页面级懒加载。
- 阶段三,重依赖延迟加载和部分依赖轻量化。
- 阶段四,样式与图标瘦身。
- 阶段六,依赖治理收尾。
- 阶段七,保留懒加载加主动预取。
- 阶段五已经回滚,不纳入本次已完成优化验收,但如果你发现和它相关的残留问题,也请指出。
请你先完整浏览当前项目,再重点从下面这些方面进行检查。
- 功能回归检查。
检查环境切换、登录流程、菜单权限、路由跳转、页面打开、懒加载、主动预取、退出登录后的状态重置等关键链路是否存在明显问题。- 路由与预加载检查。
检查所有路由是否仍然正确可达,是否存在 loadChildren 或 loadComponent 写法错误,是否有懒加载失效、预取范围异常、权限菜单和预取白名单不一致的问题。- 构建与配置检查。
检查 angular.json、环境文件、npm scripts、构建配置、assets、styles、fileReplacements 是否存在遗漏、重复、错误或不合理配置。- 依赖与导入检查。
检查是否还存在不必要的整包导入、未清理的旧依赖、无效依赖、重复依赖、CommonJS 风险、动态 import 使用不合理、未被使用的代码或文件。- 性能结果合理性检查。
结合当前项目结构,判断前面这些优化结果是否合理,是否还存在明显拖慢加载、首包、构建或运行时体验的问题。如果有,请指出最值得补的一两项,但不要直接执行。- 安全性和稳健性检查。
检查是否还存在硬编码地址、固定密钥、危险的 JSON.parse、脆弱的本地存储读取、缺少兜底逻辑、容易因为异常数据导致崩溃的代码。- 可维护性检查。
检查当前优化后是否引入了新的复杂度,比如命名混乱、逻辑分散、重复封装、写法不统一、存在“能跑但后续难维护”的地方。- 收尾清理检查。
检查是否存在可以顺手处理的小尾巴,例如未使用 import、未使用文件、临时测试代码、失效注释、过期兼容写法、无意义日志、优化后遗留的旧逻辑。执行要求如下。
- 这一轮以检查、验证、总结为主,不要默认直接大范围改代码。
- 如果发现特别明显且风险很低的小问题,可以单独列出来,但先不要直接修改。
- 不要给空泛建议,要结合当前项目真实文件和真实结构来判断。
- 请尽量明确指出问题归属到哪一类。
- 如果某一项你无法完全确认,请明确说明“不确定,需要手工验证”。
- 不要为了凑结果而硬找问题,没有问题就直接说明通过。
- 这一步的重点是验收和收尾,不是继续发散式重构。
最后请只输出以下内容。
- 当前项目整体状态判断。
- 已完成优化项的验收结果。
- 发现的问题清单。
- 其中哪些是高优先级风险,哪些只是收尾建议。
- 还需要手工验证的项目。
- 是否建议现在作为一个阶段性收尾版本结束。
- 如果还要继续,只推荐下一步最值得做的1到3项,不要展开执行。
CodeX的返回结果如下,还是很完整的了:
当前项目整体状态判断
- 当前版本已经具备“阶段性收尾候选”条件:懒加载、按路由拆包、重依赖延迟加载、环境切换脚本、编码检查都在工作。
- 但还存在 4 个高优先级风险,建议先处理后再作为正式收尾版本冻结。
已完成优化项的验收结果
- 阶段一(环境配置治理、根组件副作用整理): 部分通过。
- 环境切换配置有效(package.json:10、package.json:13、angular.json:72、angular.json:79、config-service.ts:28),但根组件仍有较重副作用和安全隐患(见问题清单)。
- 阶段二(路由拆包、页面懒加载): 通过。
- 顶层 loadChildren + 子路由 loadComponent 已落地(app.routes.ts:5)。生产构建出现大量 lazy chunk(281+),说明懒加载生效。
- 阶段三(重依赖延迟加载): 通过。
- html2canvas 已动态导入(如 quality-report.ts:211),echarts 采用延迟加载方案,Quill 样式按需注入(quill-style-loader.ts:1)。
- 阶段四(样式与图标瘦身): 部分通过。
- 图标注册已精简(icons-provider.ts:8)。生产构建首包约 2.19 MB(estimated transfer 422.27 kB),但样式 chunk 仍较大(631.75 kB raw),需持续观察。
- 阶段六(依赖治理收尾): 部分通过。
- lodash 已按函数路径引入,crypto-js 已移除代码使用;但依赖声明存在风险(见高优先级问题 #3)。历史数据见 dep_governance_report.json。
- 阶段七(懒加载 + 主动预取): 部分通过。
- 已接入自定义预加载策略(app.config.ts:33)、hover/idle 触发(app.ts:516、app.ts:583、app.html:49),并在登出时重置(app.ts:347)。但权限为空时会回退为全量预取(见问题 #5)。
发现的问题清单
高: 菜单权限过滤直接修改全局导航对象,存在跨会话/跨账号菜单污染风险。 app.ts:316、app.ts:321
高: 菜单存在可见但无路由的页面,测试环境可能点不进去(/sale/taobao-refund)。
navigation.ts:770、sales.route.ts:4
高: 项目源码使用 lodash/*,但 lodash 未在 dependencies 声明,当前依赖于 karma 的传递依赖,构建可复现性有风险。 package.json:25、production-plan-detail.ts:4
高: 安全性风险,存在硬编码固定密钥与 postMessage('*')。 app.ts:135、app.ts:174、app.ts:204
中: 预加载策略在权限列表为空时会全量预取,不完全符合“仅权限菜单预取”。 permission-aware-preloading.strategy.ts:36
中: isPassGuard 存储介质不一致(写 session,读 local),逻辑有歧义。 app.ts:145、auth.guard.ts:37
中: 本地环境白名单仅写死 localhost:4200,换端口本地调试有潜在误判。 app.ts:547
中: 存储读取存在未兜底 JSON.parse,异常数据可导致运行时报错。 storage.service.ts:48、config-service.ts:294
低: 配置和入口存在重复/未使用 provider 与 import,增加维护噪音。 app.config.ts:40、app.config.ts:41、main.ts:1
低: allowedCommonJsDependencies 有陈旧项(如 crypto-js、quill-delta)angular.json:45
低: 阶段五虽回滚 ListPageBase,但仍有 TypedListPageBase 残留(需确认是否保留)。 typed-list-page-base.ts:1、vip-activity.ts:8
低: 调试日志较多(扫描到 109 处),建议收敛。
其中哪些是高优先级风险,哪些只是收尾建议
- 高优先级风险: #1 全局导航被修改、#2 菜单路由不一致、#3 lodash 依赖声明缺失、#4 密钥与跨域消息安全。
- 收尾建议: #5~#12(预加载边界、存储健壮性、配置清理、日志清理、阶段五残留确认)。
还需要手工验证的项目
- 权限预取是否严格只触发权限内模块网络请求(不确定,需要手工验证)。
- 图标精简后是否存在缺图/闪烁(不确定,需要手工验证)。
- npm run sp 启动时是否仍出现 Prebundling/HMR 警告(不确定,需要手工验证)。
- 旧系统登录透传链路(postMessage)在真实域名下是否稳定(不确定,需要手工验证)。
- 中文文案显示是否有乱码(控制台与文件读取存在编码显示差异,不确定,需要手工验证)。
是否建议现在作为一个阶段性收尾版本结束
- 建议“先不结束最终收尾”,可以先作为 RC(候选收尾版本)。
- 先处理高优先级 4 项,再收尾更稳妥。
如果还要继续,只推荐下一步最值得做的1到3项
- 修复菜单与路由一致性 + 导航过滤改为不可变处理(解决 #1 #2)。
- 补齐依赖声明与 CommonJS 白名单清理(优先处理 lodash 声明问题,解决 #3)。
- 做一轮安全加固(移除固定密钥、收紧 postMessage 目标源与存储解析兜底,解决 #4 #8)。
由于业务逻辑方面的更改,其中部分风险是我已知且合理的,所以我选择让他处理第三点作为最终收尾。
已只处理你指定的第 3 点,且未改业务代码。
已将 lodash 补为显式运行时依赖:
package.json:41
锁文件已同步更新:
package-lock.json:26
验证结果:npm ls lodash --depth=0 现在为顶层依赖:lodash@4.18.1
npx ng build --configuration development 构建通过
说明:production-plan-detail.ts 等 lodash/* 引用无需改动,这次只修复依赖可复现性问题。