Angular CLI修改组件代码后热重载失效,但HTML修改生效求助
我之前维护Angular 4项目时也碰到过一模一样的情况——改HTML文件热重载秒生效,但修改组件TS代码完全没反应。结合你的环境版本信息,给你几个针对性的解决办法:
先清理依赖缓存,彻底重启服务
老版本Angular CLI很容易因为依赖缓存或编译缓存出问题,按这个步骤操作:- 停止当前运行的
ng serve进程 - 执行命令清理npm缓存:
npm cache clean --force - 删除项目根目录下的
node_modules文件夹和package-lock.json文件 - 重新安装依赖:
npm install - 再次启动开发服务:
ng serve
- 停止当前运行的
检查Angular CLI配置文件(angular-cli.json)
你的项目用的是beta版CLI,配置文件是angular-cli.json,重点排查这几点:- 确认
apps[0].root和apps[0].src的路径正确覆盖了你的组件目录 - 检查
apps[0].exclude数组,有没有误把组件所在文件夹加入排除列表 - 如果有自定义
include配置,确保组件TS文件被正确包含在内
- 确认
解决CLI版本冲突问题
你的环境里同时存在angular-cli: 1.0.0-beta.28.3和@angular/cli: 1.3.2,这两个是同一个工具的新旧包名(早期叫angular-cli,后来迁移到@angular/cli),版本冲突会引发各种异常。解决步骤:- 卸载全局旧版本CLI:
npm uninstall -g angular-cli - 卸载项目内的旧版本CLI依赖:
npm uninstall angular-cli --save-dev - 确保仅保留
@angular/cli@1.3.2,重新安装依赖后启动服务
- 卸载全局旧版本CLI:
检查文件路径大小写
Windows系统不区分文件名大小写,但Angular CLI的文件监听机制是大小写敏感的。如果组件文件名和代码中import路径的大小写不一致(比如组件文件是UserComponent.ts,但import写的是./userComponent),就会导致CLI无法正确监听文件变化,统一大小写即可解决。强制开启文件轮询
Windows的文件系统监听偶尔会有兼容性问题,试试启动服务时加上轮询参数:ng serve --poll 2000这个命令会让CLI每隔2000毫秒主动检查文件变化,绕过系统原生监听机制。
排查组件代码的语法错误
如果修改组件TS文件后存在语法错误,CLI可能会编译失败,进而导致热重载进程卡住。仔细查看终端输出的红色报错信息,修复错误后热重载应该就能恢复正常。
内容的提问来源于stack exchange,提问作者Babu Suriyanarayanan

