执行foreach时出现Can't resolve '@angular/router/src/utils/collection'错误求助
Hey Bryan, 这个错误我之前在项目里也碰到过,大多是因为直接引用了Angular Router内部的私有模块导致的——这些src/路径下的文件属于框架内部实现,并不是对外暴露的公共API,Angular的版本更新或者打包配置很容易让它们无法被解析。下面是几个针对性的解决步骤:
替换内部私有导入为公共API
先定位到你代码里导入@angular/router/src/utils/collection的地方,这类内部模块是不被Angular官方支持的,随时可能被移除或重命名。比如如果你是用了里面的forEach工具函数,完全可以用JavaScript原生的Array.prototype.forEach替代;如果是依赖其他工具方法,建议检查@angular/router的公共导出文档,找官方提供的替代方案,或者自己实现对应的逻辑。清理缓存并重装依赖
有时候依赖缓存或者版本不一致也会触发这类解析错误,执行以下命令重置依赖环境:# 清除npm缓存 npm cache clean --force # 删除依赖目录和锁文件 rm -rf node_modules package-lock.json # 重新安装依赖 npm install如果你用的是Yarn,对应命令如下:
yarn cache clean rm -rf node_modules yarn.lock yarn install确保Angular核心依赖版本统一
项目里@angular/core、@angular/router等核心包的版本必须保持一致,版本差异可能导致内部模块路径不匹配。打开你的package.json,检查所有@angular/开头的依赖版本号是否相同,如有差异,统一成同一个稳定版本后重新安装依赖。检查打包配置是否异常
如果自定义过tsconfig.json的路径映射,或者angular.json的打包选项,可能导致模块解析路径出错。确保tsconfig.json里的compilerOptions.paths没有错误映射@angular/router相关路径,同时angular.json的build.options中没有禁止解析内部模块的特殊配置。
按照上面的步骤排查,应该能解决这个解析错误。如果还是有问题,可以把你代码里导入这个模块的具体片段贴出来,我再帮你分析更针对性的解决办法~
内容的提问来源于stack exchange,提问作者Bryan Zavala

