- Node简介
- 第一个node程序
- module(模块系统)
- npm包管理器
- 模块系统优先级
- 认识http内置模块
- url内置模块
- path内置模块
- fs内置模块
- http模块服务端进阶
- http报文浅析
- url模块进阶
- path模块进阶
- querystring模块进阶
- 了解Buffer和Stream
- os模块
- Buffer模块
- Stream模块
- http模块客户端
- Cookie浅析
PATH模块进阶
Windows 与 POSIX
path
模块的默认操作会根据 Node.js 应用程序运行的操作系统的不同而变化。 比如,当运行在 Windows 操作系统上时,path
模块会认为使用的是 Windows 风格的路径。
例如,对 Windows 文件路径 C:\temp\myfile.html
使用 path.basename()
函数,运行在 POSIX 上与运行在 Windows 上会产生不同的结果:
在 POSIX 上:
path.basename('C:\\temp\\myfile.html');
// 返回: 'C:\\temp\\myfile.html'
在 Windows 上:
path.basename('C:\\temp\\myfile.html');
// 返回: 'myfile.html'
要想在任何操作系统上处理 Windows 文件路径时获得一致的结果,可以使用 path.win32
:
在 POSIX 和 Windows 上:
path.win32.basename('C:\\temp\\myfile.html');
// 返回: 'myfile.html'
要想在任何操作系统上处理 POSIX 文件路径时获得一致的结果,可以使用 path.posix
:
在 POSIX 和 Windows 上:
path.posix.basename('/tmp/myfile.html');
// 返回: 'myfile.html'
我们还可以使用 os.platform()
查看我们使用的系统平台,os.platform()
方法返回一个字符串, 指定Node.js编译时的操作系统平台,当前可能的值有:
'aix'
'darwin'
'freebsd'
'linux'
'openbsd'
'sunos'
'win32'
path.parse(path)
path.parse()
方法返回一个对象,对象的属性表示 path
的元素。
返回的对象有以下属性:
dir
root
base
name
ext
例如,在 POSIX 上:
path.parse('/home/user/dir/file.txt');
// 返回:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
在 Windows 上:
path.parse('C:\\path\\dir\\file.txt');
// 返回:
// { root: 'C:\\',
// dir: 'C:\\path\\dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
path.dirname(path)
path.dirname()
方法返回一个 path
的目录名,类似于 Unix 中的 dirname
命令。
path.basename(path[, ext])
path.basename()
方法返回一个 path
的最后一部分。
ext是过滤参数
path.extname(path)
path.extname()
方法返回 path
的扩展名,即从 path
的最后一部分中的最后一个 .
(句号)字符到字符串结束。 如果 path
的最后一部分没有 .
或 path
的文件名的第一个字符是 .
,则返回一个空字符串。
path.format(pathObject)
path.format()
方法会从一个对象返回一个路径字符串。 与 path.parse()
相反。
path.isAbsolute(path)
path.isAbsolute()
方法会判定 path
是否为一个绝对路径(从根目录开始/或从盘符开始c://)。如果给定的 path
是一个长度为零的字符串,则返回 false
。
path.join([…paths])内部调用normalize方法
path.join()
方法使用平台特定的分隔符把全部给定的 path
片段连接到一起,并规范化生成的路径。
长度为零的 path
片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 '.'
,表示当前工作目录。
例子:
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'
path.normalize(path)
path.normalize()
方法会规范化给定的 path
,并解析 '..'
和 '.'
片段。
当发现多个连续的路径分隔符时(如 POSIX 上的 /
与 Windows 上的 \
或 /
),它们会被单个的路径分隔符(POSIX 上是 /
,Windows 上是 \
)替换。 末尾的多个分隔符会被保留。
如果 path
是一个长度为零的字符串,则返回 '.'
,表示当前工作目录。
例如,在 POSIX 上:
path.normalize('/foo/bar//baz/asdf/quux/..');
// 返回: '/foo/bar/baz/asdf'
在 Windows 上:
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'
path.relative(from, to)后面相对于前面的路径
path.relative()
方法返回从 from
到 to
的相对路径(基于当前工作目录)。 如果 from
和 to
各自解析到同一路径(调用 path.resolve()
),则返回一个长度为零的字符串。
如果 from
或 to
传入了一个长度为零的字符串,则当前工作目录会被用于代替长度为零的字符串。
path.sep属性
提供了平台特定的路径片段分隔符:
- Windows 上是
\
- POSIX 上是
/
例如,在 POSIX 上:
'foo/bar/baz'.split(path.sep);
// 返回: ['foo', 'bar', 'baz']
在 Windows 上:
'foo\\bar\\baz'.split(path.sep);
// 返回: ['foo', 'bar', 'baz']
注意:在 Windows 上,斜杠字符(/
)和反斜杠字符(\
)都可作为路径分隔符; 但 path
的方法只添加反斜杠(\
)。