path.join([...paths])
...paths
string 路径片段的序列- 返回:string
path.join()
方法会将所有给定的 path
片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径。
长度为零的 path
片段会被忽略。 如果连接后的路径字符串为长度为零的字符串,则返回 '.'
,表示当前工作目录。
如果任何的路径片段不是字符串,则抛出 TypeError。
const path = require('path')
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') // 结果:'/foo/bar/baz/asdf'
path.resolve([...paths])
...paths
string 路径片段的序列- 返回:string
path.resolve()
方法会将路径或路径片段的序列解析为绝对路径。
给定的路径序列会从右到左进行处理,后面的每个 path
会被追加到前面,直到构造出绝对路径。 例如,给定的路径片段序列:/foo
、/bar
、 baz
,调用 path.resolve('/foo', '/bar', 'baz')
会返回 /bar/baz
,因为 'baz'
不是绝对路径,但 '/bar' + '/' + 'baz'
是。
如果在处理完所有给定的 path
片段之后还未生成绝对路径,则会使用当前工作目录。
生成的路径会被规范化,并且尾部的斜杠会被删除(除非路径被解析为根目录)。
零长度的 path
片段会被忽略。
如果没有传入 path
片段,则 path.resolve()
会返回当前工作目录的绝对路径。
如果任何参数不是字符串,则抛出 TypeError。
const path = require('path')
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/itbilu/node,结果为 '/home/itbilu/node/wwwroot/static_files/gif/image.gif'
对比
const path = require('path')
console.log(__dirname) // C:\app\test
path.join(__dirname,'/upload') // C:\app\test\upload
path.join(__dirname,'./upload') // C:\app\test\upload
path.resolve() // C:\app\test
path.resolve(__dirname,'/upload') // C:\upload
path.resolve(__dirname,'./upload') // C:\app\test\upload
对于path.resolve()
的理解
其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这引起路径可以是文件,并且可不必实际存在(resolve()
方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作)。例如:
path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
相当于
cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile
pwd