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自然没有啦