fs.readFile('./.env')报ENOENT的根源是路径解析基于process.cwd()而非__dirname,应改用path.join(__dirname, '.env');VSCode隐藏文件需修改files.exclude和search.exclude设置,并重启文件夹;插件崩溃可能干扰路径解析,可用code --disable-extensions排查。

为什么 fs.readFile('./.env') 总报 ENOENT
不是文件真丢了,而是 Node.js 解析路径时认的是当前工作目录(process.cwd()),不是你 JS 文件所在位置。VSCode 终端默认打开在工作区根目录,但你的脚本可能在 src/ 下——这时 ./.env 实际去找的是根目录下的 .env,而不是 src/.env。
- 用
console.log(__dirname, process.cwd())对比两者,不一致就是根源 - 必须用
path.join(__dirname, '.env')锚定 JS 文件自身位置,别拼字符串 - 如果
.env在上层目录,写成path.join(__dirname, '..', '.env')
VSCode 资源管理器里根本看不到 .env?先开隐藏文件显示
VSCode 默认靠 "**/.*": true 这条规则过滤所有点文件,不是系统级隐藏,是主动屏蔽。你确认文件存在、终端也能读,但资源管理器就是空的,大概率卡在这步。
- 打开命令面板(
Ctrl+Shift+P或Cmd+Shift+P),运行Preferences: Open Workspace Settings (JSON) - 找到
files.exclude,删掉或注释掉"**/.*": true - 保存后,必须 关闭再重新打开当前文件夹(
File > Close Folder → File > Open Folder),否则缓存不刷新 - 工作区设置优先级高于用户设置,别改错地方——先检查
.vscode/settings.json是否已存在files.exclude
search.exclude 和 files.exclude 是两套独立系统
你让 .env 显示出来了,但 Ctrl+Shift+F 全局搜索仍搜不到它?那八成是 search.exclude 也在拦着。它和 files.exclude 没有自动同步关系,得单独配。
- 同样在
settings.json中找search.exclude字段 - 如果没定义,可手动加:
"search.exclude": { "**/.env": false }(设为false表示不禁用) - 或者更稳妥:删掉整个
search.exclude块,让搜索回归默认行为
插件崩溃干扰了隐藏文件读取流程
某些插件(比如旧版 Python、SFTP、AI 补全类)会在启动时尝试 spawn 外部进程,而路径含空格、中文或权限不足会导致静默失败——这种错误不会出现在 UI 提示里,只藏在 exthost 日志末尾或系统级进程退出码中。它可能间接导致文件监听失效、资源管理器不刷新、甚至调试器拿不到正确 cwd。
- 先用
code --disable-extensions启动,验证是否插件问题 - 若禁用后
.env能正常显示+读取,再用Developer: Start Extension Bisect二分定位肇事插件 - 重点盯
Activation Time > 1000ms或状态为Activation failed的插件 - 禁用后仍异常?考虑物理删除插件目录:
~/.vscode/extensions/ms-python.python-*(Linux/macOS)或%USERPROFILE%\.vscode\extensions\ms-python.python-*(Windows)
files.exclude 和 search.exclude 分属不同模块、各自缓存、各自生效;插件崩溃又可能在底层劫持路径解析逻辑——三者叠加时,现象看似随机,实则每一步都有迹可循。


















