Node的文件路径

Node 中的文件路径大概有__dirname,__filename,process.cwd(), ./ 或者 ../,前三个都是绝对路径,为了便于比较,./../我们通过 path.resolve('./')来转换为绝对路径。

例如当前的文件结构如下:

app/
-lib/
-common.js
-model
-tesk.js
-test.js

model/task.js中编写如下代码:

var path = require('path');

console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve('./'));

mode/test.js中编写如下代码:

var fs = require('fs');
var common = require('../lib/common');

fs.readFile('../lib/common.js', function(err, data) {
if (err) return console.log(err);
console.log(data);
});

app目录下,执行node model/task.js,得到的输出:

/$dir/app/model
/$dir/app/model/task.js
/$dir/app
/$dir/app

执行node model/test.js,会报路劲错误,readFile找不到../lib/common.js路劲

结论:

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
  • __filename: 总是返回被执行的 js 的绝对路径
  • process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
  • ../: 在require()中使用,返回被运行的 js 所在的上一层文件夹路劲,其他情况下返回运行 node 命令时所在的上一层文件夹路劲
  • ./: 在require()中使用是跟__dirname的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟process.cwd()效果相同,是相对于启动脚本所在目录的路径。

只有在require()时才使用相对路径(./, ../)的写法,其他地方一律使用绝对路径,如下:

// 当前目录下
path.dirname(__filename) + '/test.js';
// 相邻目录下
path.resolve(__dirname, '../lib/common.js');
文章作者: Bailv
文章链接: https://bailv.github.io/2019/04/30/Node的文件路径/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 百虑Bailv