VS Code远程WSL/容器环境下ng build --watch无法检测文件变更问题
问题定性
这是Remote WSL、Remote Containers远程开发场景下的已知常见问题,根本原因是跨文件系统的inotify事件传递限制、以及Angular CLI底层依赖的webpack监听机制默认未适配跨系统挂载场景。
可行解决方案
- 优先将Angular项目文件存放在WSL原生文件系统、或者容器内部文件系统,不要挂载Windows本地目录到WSL/容器中作为项目目录。该方案是最优解,除解决监听失效问题外,还可以大幅提升项目编译、依赖安装的执行效率。
- 若必须使用挂载的外部目录,可开启Angular CLI的轮询监听模式,执行命令时添加轮询参数即可:
ng build --watch --poll 2000,参数值为轮询间隔(单位毫秒),可根据需求调整,间隔越小响应速度越快,对应的CPU占用也会更高。 - 调高环境的inotify监听上限,避免因监听数量不足导致失效:
WSL环境下执行命令:sudo sysctl fs.inotify.max_user_watches=524288,若需要永久生效,可将fs.inotify.max_user_watches=524288写入/etc/sysctl.conf文件后执行sysctl -p加载配置。
Remote Containers环境下可将上述配置添加到devcontainer.json的初始化命令中,或调整容器运行时的inotify相关参数。 - 升级VS Code及Remote WSL、Remote Containers插件到最新稳定版,旧版本存在文件同步延迟导致监听事件丢失的已知bug。
内容的提问来源于stack exchange,提问作者Robin Webb
相关产品推荐
相关产品推荐

