Press "Enter" to skip to content

path.resolve()和path.join()的区别

path.resolve()

path.resolve() 把一个路径或路径片段的序列解析为一个绝对路径。

格式:path.resolve([...paths])
path.resolve(); 
// 输出:C:\Users\Administrator\Desktop\demo
// 理解:这个应该好理解,默认返回所在目录绝对路径,等于直接输出__dirname


path.resolve("/abc");
// 输出:C:\abc
// 理解:'/'代表就是根目录的意思,这里根目录是C:\,所以'/abc‘就输出C:\abc


path.resolve('../abc');
// 输出:C:\Users\Administrator\Desktop\abc
// 理解:这里的路径开头没有'/',所以自动补上__dirname,于是等于'__dirname/../abc'
// __dirname        =    C:\Users\Administrator\Desktop\demo
// __dirname/..     =    C:\Users\Administrator\Desktop
// __dirname/../abc =    C:\Users\Administrator\Desktop\abc


path.resolve('a', 'b', '/d/e', 'f');
// 输出:C:\d\e\f
// 等价:path.resolve('__dirname/a', 'b', 'C:\d\e', 'f')
// 理解:还是看下面的步骤理解吧:
// 到a时   =   __dirname/a   = C:\Users\Administrator\Desktop\demo\a
// 到b时   =   __dirname/b   = C:\Users\Administrator\Desktop\demo\a\b
// /d/e = C:\d\e,因为/d/e代表根目录,所以这里又出现了根目录,会把前面的路径覆盖掉
// 到f时   = C:\d\e\f,因为前面有时一个完整的路径了,这里的f就直接填补上了


path.resolve('/a', '/b', '/c');
// 输出:C:\c
// 等价:path.resolve('C:\a', 'C:\b', 'C:\C')
// 理解:三个都有根目录,所以最后一个覆盖掉前面的了,只输出C:\c


path.resolve('bar', 'baz', 'foo');
// 输出:C:\Users\Administrator\Desktop\demo\bar\baz\foo
// 理解:由于三个路径都没有根目录'/',所以第一个就被自动补上__dirname
// 所以等于path.resolve('__dirname/bar', 'baz', 'foo');


path.resolve('/foo', 'bar/', 'baz/');
// 输出:C:\foo\bar\baz
// 理解:因为第一个有根目录符号'/',而且后面都没有根目录,所以相当于path.resolve('C:\foo', 'bar/', 'baz/');


path.resolve('/');
// 输出:C:\ 
// 理解:因为路径为根路径,所以就是C:\

path.join()

path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。

格式:path.join([...paths])
path.join(); 
// 输出:.
// 理解:连接后为空字符串,表示当前目录


path.join('a', 'b', '..', 'c/', './d'); 
// 输出:a/c/d
// 理解:a/b/../c/d = a/c/d


path.join('/foo', 'bar', './baz');
// 输出:/foo/bar/baz
// 理解:全部拼接起来一个路径


path.join('/foo', 'bar', '/baz', '..');
// 输出:/foo/bar
// 理解:也是全部拼接,得到'/foo/bar/baz/..','..'是返回上一级的意思,所以baz自然没有啦
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注