path 与 __dirname
相对路径在 Node 里是个坑:fs.readFile('./a.txt') 是相对“启动目录”(cwd),在哪个目录执行 node 命令就 relative 到哪里,部署时常因此找不到文件。
解药是 __dirname —— 它代表“当前 js 文件所在目录的绝对路径”,无论从哪里启动都不会变。所有文件操作都建议 path.join(__dirname, ...) 拼路径。
- ./ 相对 cwd(你敲 node 命令的目录),换目录就失效
- __dirname / __filename 相对当前源码文件,部署后依然稳定
- 路径拼接一律用 path.join,它自动处理斜杠与多余分隔符
JS
const fs = require('fs'); const path = require('path'); // ❌ 相对 cwd:换到别的目录启动就报 ENOENT // fs.readFileSync('./data/users.json'); // ✅ 相对当前文件,与启动位置无关 const dataFile = path.join(__dirname, 'data', 'users.json'); console.log('数据文件:', dataFile); // Windows 下自动得到反斜杠:C:\proj\data\users.json // 命令行启动目录(cwd)也不是没用:适合接收用户传入的路径 console.log('cwd =', process.cwd()); // __filename:当前文件的绝对路径 console.log('本文件 =', __filename);
本节要点文件路径一律 path.join(__dirname, ...):__dirname 相对源码文件,稳如泰山;./ 相对 cwd,随启动目录漂移。




