Linux执行ng build报错:模块未找到(Windows可正常构建)
ng build报错但Windows正常构建的问题 嘿,这个坑我踩过好几次了!核心原因很简单:Linux文件系统是严格区分大小写的,而Windows默认不区分。你代码里引用组件、服务的路径/文件名大小写,和实际文件系统里的真实命名不匹配,Windows能“宽容”识别,但Linux就直接找不到文件了。
看你给出的报错信息,比如Cannot find module './iteminquiry.service',十有八九是你代码里写的路径大小写和实际服务文件的大小写不一样——比如实际文件是ItemInquiry.service.ts,但你import的时候写的是小写的iteminquiry.service,或者反过来。
给你几个具体的解决步骤:
先核对所有报错涉及的import路径
打开报错里提到的文件,逐行检查import语句的路径:- 比如
app/app.module.ts第23行导入iteminquiry.component的路径,去src/app/iteminquiry/目录下看实际组件文件名的大小写,必须完全一致,包括文件夹名和文件名。 - 再看
editItemInquiry.component.ts第4行的./iteminquiry.service,确认实际服务文件的命名是不是和这个路径大小写完全匹配。
- 比如
统一项目的文件命名规范
建议遵循Angular官方的命名习惯,比如组件用kebab-case(小写加短横线),比如item-inquiry.component.ts,服务用item-inquiry.service.ts。统一规范后,确保所有import路径和文件名的大小写100%对应,从根源避免这类问题。清理缓存后重新构建
有时候旧缓存会干扰构建,执行下面的命令彻底清理后再试:ng clean rm -rf node_modules package-lock.json npm install ng buildGit用户注意:别让Git忽略大小写变更
如果你的项目用Git管理,默认Git可能会忽略文件名的大小写变化,导致你本地修正后,远程仓库还是旧的大小写命名。执行下面的命令让Git识别大小写变更:git config core.ignorecase false然后把修正后的文件提交到仓库,这样其他Linux环境拉取代码后就不会再出问题了。
内容的提问来源于stack exchange,提问作者Piush

