path.resolve()解析

2,878 阅读1分钟

node中 path.resolve()文档中的解析

方法将路径或路径片段的序列解析为绝对路径。给定的路径序列从右到左处理,每个后续的 path 会被追加到前面,直到构建绝对路径。 例如,给定路径片段的序列:/foo/barbaz,调用 path.resolve('/foo', '/bar', 'baz') 将返回 /bar/baz,因为 'baz' 不是绝对路径,而 '/bar' + '/' + 'baz' 是。 node中文地址

path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

var path = require('path');

console.log(path.resolve())         //    /Users/yuan/Documents/Web 
console.log(path.resolve('/aaa'))   //    /aaa 
console.log(path.resolve('./aaa'))  //    /Users/yuan/Documents/Web/aaa
console.log(path.resolve('/aaa', '/bbb'))   //    /bbb
console.log(path.resolve('/aaa', './bbb'))  //    /aaa/bbb
console.log(path.resolve('./aaa', '/bbb'))  //    /bbb
console.log(path.resolve('./aaa', './bbb'))  //   /Users/yuan/Documents/Web/aaa/bbb
console.log(path.resolve('./aaa', './bbb', './ccc'))  // /Users/yuan/Documents/Web/aaa/bbb/ccc
console.log(path.resolve('../aaa', './bbb', '../ccc'))  // /Users/yuan/Documents/aaa/ccc
console.log(path.resolve('../aaa', '../bbb', '../ccc'))  // /Users/yuan/Documents/ccc
console.log(path.resolve('../aaa', './bbb', './ccc'))  // /Users/yuan/Documents/aaa/bbb/ccc
console.log(path.resolve('./aaa', './bbb', '../ccc'))  // /Users/yuan/Documents/Web/aaa/ccc

如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径。

正确理解应该是从后向前,若字符以 / 开头,不会拼接到前面的路径;若以 ../ 开头,拼接前面的路径,且不含最后一节路径;若以 ./ 开头 或者没有符号 则拼接前面路径