必须用Mark Directory as→Excluded而非Ignored或.gitignore,因Excluded才真正停止索引、解析和补全;Ignored仅影响UI显示,目录仍被扫描。

直接排除 vendor 和 node_modules 目录,是提升大型 PHP 项目索引速度最有效、最立竿见影的操作——但必须用 Mark Directory as → Excluded,而不是加进 .gitignore 或设为 Ignored。
为什么 vendor/node_modules 必须标为 Excluded 而不是 Ignored
PhpStorm 的 Ignored 只影响文件高亮和部分 UI 显示,不阻止索引;而 Excluded 才真正从符号解析、类型推导、跳转、补全中移除整个目录。现象上:Ignored 目录仍是黄色图标,Excluded 是灰底红斜杠,且状态栏会提示 Indexing paused for excluded files。
- 右键点击项目根目录下的
vendor→Mark Directory as→Excluded - 同理处理
node_modules、storage/logs、bootstrap/cache、dist - 确认生效:进入
File > Settings > Directories,检查这些路径是否列在Excluded区域 - 如果目录仍出现在搜索结果或补全列表里,说明没真正排除——别信
.gitignore,也别信“已忽略”的错觉
排除 vendor 后怎么保留 Laravel/Lumen/Symfony 的跳转能力
全量排除 vendor 会导致 use Illuminate\Support\Str 点不进去。解决办法不是“不排”,而是“精准排”:先整体排除,再把关键框架子路径单独设回 Sources Root。
- 先在
Settings > Directories中将vendor标为Excluded - 点击左上角
+添加新路径,填入完整包路径,例如:vendor/laravel/framework(注意大小写,不能只写vendor/laravel) - 在 Project 视图中找到该路径 → 右键 →
Mark as > Sources Root - 若用的是 Symfony,对应路径是
vendor/symfony/framework-bundle;Lumen 是vendor/laravel/lumen-framework - 别忘了关掉
Settings > Languages & Frameworks > PHP > Composer > Enable auto-import for Composer packages,否则它会偷偷把所有 autoloaded 路径拉回来索引
Deployment 上传时 node_modules 还在传?那是配错了地方
Mark as Excluded 对 Deployment 完全无效——这是两个独立系统。上传行为只认 Tools > Deployment > Configuration > Options > Exclude items by name 里的规则。
立即学习“PHP免费学习笔记(深入)”;
- 打开
Tools > Deployment > Configuration→ 切到Options标签页 - 在
Exclude items by name输入框中填入:node_modules/, dist/, .env.local, *.log(逗号分隔,支持通配符) - 务必带斜杠:
node_modules/表示排除目录及其全部子内容;node_modules(无斜杠)可能只匹配同名文件 - 如果配置了多套部署环境(dev/staging/prod),每套的
Exclude items by name都得单独检查一遍 - 这个规则存在
.idea/deployment.xml,和.idea/modules.xml里的Excluded设置互不干扰
排除后索引还是慢?查这三项隐藏开关
即使目录已标为 Excluded,索引仍在后台啃 vendor,大概率是以下三个地方悄悄开了后门:
-
Settings > Languages & Frameworks > PHP > Composer:关掉Enable auto-import for Composer packages -
Settings > Editor > Inspections > PHP:关闭Report undefined symbols in vendor directories(否则 IDE 会反向触发 vendor 解析) -
Settings > Editor > File Types:检查Recognized File Types里有没有把*.log、*.sql、*.zip错绑到PHP或Text类型——它们会被强制语法分析和索引
真正起效的排除,是让 PhpStorm “看不见、不解析、不响应”。任何一处漏关,都可能让几万文件重新挤进索引队列——尤其当项目里混入了超大 JSON、损坏的 PHPDoc 或二进制资源时,这种隐性索引更容易卡死或假死。


















