• 大多数情况下我们使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录,比如在文件读取操作的API中,我们写相对路径,它相对的是命令行工具中的当前工作目录
  • 在读取文件或设置文件路径时一般都会选择绝对路径
  • 使用__dirname获取当前文件所在的绝对路径

命令行工具所处目录和文件所处目录为同一目录下的代码示例:

// 导入系统模块fs
const fs = require('fs');
// 读取文件操作
// 此时命令行工具所在的目录是JS文件,而node2.js也在JS目录下,处于的是同一个目录,所以读取成功了
fs.readFile('./node2.js','utf-8',(err,doc) => {
    // 如果读取成功,err的值为null doc输出的就是node2.js文件的内容
    console.log(err);
    console.log(doc);
});

输出内容如下:

nodejs readFileSync的相对路径_读取文件


命令行工具所处目录和文件所处目录不是同一个目录的代码示例:

// 导入系统模块fs
const fs = require('fs');
// 读取文件操作
// 利用cd ../ 让命令行工具的目录处在了JS文件的上一级,也就是C盘
// 通过命令行工具可以发现是在C:\Untitled-node.js查找的,而Untitled-node.js是在JS目录下的,自然会读取不到,然后报错
fs.readFile('./node2.js','utf-8',(err,doc) => {
    // 如果读取成功,err的值为null doc输出的就是node2.js文件的内容
    console.log(err);
    console.log(doc);
});

输出内容如下:

nodejs readFileSync的相对路径_绝对路径_02


因此可以用__dirname获取当前文件所在的绝对路径。

用获取到的绝对路径拼接上想要执行的文件即可。

代码示例:

// 导入系统模块fs
const fs = require('fs');
// 导入路径模块
const path = require('path');

// 路径拼接的结果:C:\JS\node2.js 正好是node2.js所在的目录
console.log(path.join(__dirname,'node2.js'));
// 读取文件操作
// 利用cd ../ 让命令行工具的目录处在JS文件的上一级,也就是C盘
fs.readFile(path.join(__dirname,'node2.js'),'utf-8',(err,doc) => {
// 读取成功,err的值为null doc输出的就是node2.js文件的内容
console.log(err);
console.log(doc);
});

输出内容如下:

tips:命令行工具所处目录在C盘,而node2.js文件在JS目录下,因此使用__dirname获取到绝对路径,然后再进行路径拼接。

nodejs readFileSync的相对路径_命令行工具_03