绝对路径
绝对路径是从文件系统的根目录开始的完整路径,可以唯一地标识文件或目录的位置。绝对路径是以根目录开始的
- 在Unix/Linux系统中,绝对路径是类似于/home/user/documents/file.txt,它从根目录/开始,并按照目录结构一直描述到目标文件或目录。
- 在Windows系统中,绝对路径是类似于C:\Users\User\Documents\file.txt的形式。
相对路径
相对路径是相对于当前工作目录的路径,描述了目标文件或目录与当前位置之间的关系。相对路径以当前目录开始的
- 在Unix/Linux系统中,如果当前工作目录是/home/user,那么相对路径documents/file.txt指的是/home/user/documents/file.txt。
- 在Windows系统中,如果当前工作目录是C:\Users\User,那么相对路径Documents\file.txt指的是C:\Users\User\Documents\file.txt。
POSIX 和 Windows
POSIX(Portable Operating System Interface)是一系列IEEE标准,旨在促进和保证应用程序和操作系统之间的兼容性。POSIX定义了一套广泛的操作系统接口,包括但不限于系统调用、命令行工具和实用程序的规范。
-
Windows:
- 路径分隔符是反斜杠(``),例如
C:\Users\Example\file.txt,这是一个历史原因导致不完全遵守POSIX标准 - 文件路径可以是相对的也可以是绝对的,绝对路径通常以盘符开头。
- 不区分大小写,
C:\Users和c:\users被认为是相同的路径。
- 路径分隔符是反斜杠(``),例如
-
POSIX:
-
在 UNIX、Linux、macOS(基于UNIX)等系统中遵循 POSIX 标准。
-
路径分隔符是正斜杠(
/),例如/home/example/file.txt。 -
文件路径同样可以是相对的或绝对的,绝对路径以根目录
/开头。 -
区分大小写,
/home/Users和/home/users被认为是不同的路径。
-
-
当使用 Windows 文件路径时,若要在任何操作系统上获得一致的结果,则使用
path.win32
path.win32.basename('C:\\temp\\myfile.html');
// Returns: 'myfile.html'
- 当使用 POSIX 文件路径时,若要在任何操作系统上获得一致的结果,则使用
path.posix
path.posix.basename('/tmp/myfile.html');
// Returns: 'myfile.html'
常用的方法
-
path.resolve([...paths])
拼接路径, 会从左向右找到第一个绝对路径, 往后开始拼接,他能够识别 . 和 .. 这样的运算符
path.resolve('/foo/bar', './baz');
// Returns: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// Returns: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'
- path.join
拼接路径, 会将路径中的 / 替换为当前系统的路径分隔符
const filePath = path.join('dir', 'subdir', 'file.txt');
console.log(filePath);
// 输出在 Unix 上: "dir/subdir/file.txt"
// 输出在 Windows 上: "dir\subdir\file.txt"
-
path.sep
获取当前操作系统的路径盘符
'foo/bar/baz'.split(path.sep);
// Returns: ['foo', 'bar', 'baz']
-
path.parse(path)
解析路径并返回一个对象
path.parse('/home/user/dir/file.txt');
// Returns:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
-
path.format(pathObject)
从一个对象返回路径字符串,是 path.parse 的逆操作。
- 我们把从parse中解析成对象的再丢进format中试试
- 这里有一个点要注意,我们的路径用posix的
/,而不是window的``。所以需要在path这个API后面加上posix(强制使用特定风格的路径分隔符)。如果不加就会默认当前系统的习惯(比如我是Windows系统,就会变成path.win32.format()),结果就会是/home/user/dir\file.txt这样的路径不统一
// 将如下的对象格式化成路径
{
root: '/',
dir: '/Users/luochun/LearnRecord/node',
base: '01.js',
ext: '.js',
name: '01'
}
console.log(
"🚀 ~ This is a result of console.log ~ ✨: ",
path.format({
root: "/",
dir: "/Users/luochun/LearnRecord/node",
base: "01.js",
ext: ".js",
name: "01",
})
);
// /Users/luochun/LearnRecord/node/01.js
-
path.basename(path[, suffix])
获取路径下的文件名称, 第二个参数可以删除
path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux'
-
path.dirname(path)
获取路径的目录名称
path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf'
-
path.extname(path)
获取文件的扩展名称
path.extname('index.html');
// Returns: '.html'
path.extname('index.coffee.md');
// Returns: '.md'
path.extname('index.');
// Returns: '.'
path.extname('index');
// Returns: ''
path.extname('.index');
// Returns: ''
path.extname('.index.md');
// Returns: '.md'
-
path.join([...paths])
拼接路径, 他能够识别 . 和 .. 这样的运算符, 如果不是字符串类型的数据,会报错
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// Throws 'TypeError: Path must be a string. Received {}'
__dirname 和 __filename
__dirname: 是一个全局变量, 保存的是: 所在文件的所在目录的绝对路径(目录的绝对路径)
__filename: 是一个全局变量,保存的是: 所在文件的绝对路径