nodejs入门API之path模块
- Path模块在各个系统上的差异
- Path模块API解析
一、Path模块在各个系统上的差异
path模块提供用于处理文件路径和目录路径的使用工具。
let path = require('path')
由于node.js应用程序运行所在的系统不一样会导致path获取的路径风格不一致。比如windows与Unix上的POSIX系统操作接口就会有如下差别:
//比如path.basename()获取路径最后一部分的差异 path.basename('C:\\temp\\myfile.html'); // POSIX -- 返回: 'C:\\temp\\myfile.html' // Windows -- 返回: 'myfile.html' //比如path.delimaiter路径界定符的差异 console.log(process.env.PATH); // POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' // Windows -- 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
除了获取的数据值的差异,还有比如在示例中可以看到的路径定界符的差异,windows上可以有(“\\”,“//”,“/”),在POSIX系统上都采用(“/”)。
还有就是在posix系统上使用path使用path.posix属性来指定调用posix系统模式下的方法,详细见第三节3.2和3.4的内容。
二、Path模块API解析(方法)
2.1 path.basename(path[,ext]):
用来获取路径指向的节点名称。
path<string>:路径字符
ext<string>:可选扩展名;指定路径名获得路径最后一部分的获取结果会省略后缀
path.basename('/foo/bar/baz/asdf/quux.html'); // 返回: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // 返回: 'quux'
2.2 path.dirname(path)
用来获取当前路径所在目录,也就不包含最后一个路径节点和路径分隔符。
1 //示例一 2 path.dirname('/foo/bar/baz/asdf/quux'); 3 // 返回: '/foo/bar/baz/asdf' 4 5 //示例二 6 path.dirname("/foo/path/index.js"); 7 // 返回: '/foo/path'
3.3 path.extname(path)
用来获取路径扩展名。
1 path.extname('index.html'); 2 // 返回: '.html' 3 path.extname('index.coffee.md'); 4 // 返回: '.md' 5 path.extname('index.'); 6 // 返回: '.' 7 path.extname('index'); 8 // 返回: '' 9 path.extname('.index'); 10 // 返回: '' 11 path.extname('.index.md'); 12 // 返回: '.md'
2.4 path.format(pathObject)
将路径对象转换成路径字符串。对象属性包含:dir、root、base、name、ext。注意如果是使用根路径root需要在末尾添加路径分隔符,如果使用文件类型需要在文件类型名称前添加点“.”。
- 如果提供了
pathObject.dir
,则忽略pathObject.root
。(使用root时需要在尾部添加路径分隔符) - 如果
pathObject.base
存在,则忽略pathObject.ext
和pathObject.name
。
还需要注意在windows上拼接字符串时,手动写入分隔符时需要写入双反斜杠(\\),这在第一节的示例中已经可以看到相关内容。
1 //windows上的示例 2 let path = require("path"); 3 console.log( path.format({root:"root\\",name:"name",ext:".ext"}));//root\name.ext 4 console.log( path.format({dir:"dir",name:"name",ext:".ext"}));//dir\name.ext 5 console.log( path.format({root:"root\\",base:"base.txt"}));//root\base.txt 6 console.log( path.format({dir:"dir",base:"base.txt"}));//dir\base.txt
2.5 path.isAbsolute(path):
检测路径是否是绝对路径。
1 //windows上的示例 2 let path = require("path"); 3 path.isAbsolute('//server'); // true 4 path.isAbsolute('\\\\server'); // true 5 path.isAbsolute('C:/foo/..'); // true 6 path.isAbsolute('C:\\foo\\..'); // true 7 path.isAbsolute('bar\\baz'); // false 8 path.isAbsolute('bar/baz'); // false 9 path.isAbsolute('.'); // false 10 11 //POSIX 12 path.isAbsolute('/foo/bar'); // true 13 path.isAbsolute('/baz/..'); // true 14 path.isAbsolute('qux/'); // false 15 path.isAbsolute('.'); // false
2.6 path.join([...path]):
将路径片段使用平台特定的分隔符作为定界符连接起来,生成符合平台规范的路径字符串。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // 返回: '/foo/bar/baz/asdf' path.join('foo', {}, 'bar'); // 抛出 'TypeError: Path must be a string. Received {}'
2.7 path.nornalize(path):
将传入的不规范的路径字符串处理成规范的路径字符串。比如在路径字符串中出现连续的多个定界符,可以通过nornalize()处理转换成标准的符合规范的路径字符串,比如示例:
1 //例如,在 POSIX 上: 2 path.normalize('/foo/bar//baz/asdf/quux/..'); 3 // 返回: '/foo/bar/baz/asdf' 4 5 //在 Windows 上: 6 path.normalize('C:\\temp\\\\foo\\bar\\..\\'); 7 // 返回: 'C:\\temp\\foo\\' 8 9 path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar'); 10 // 返回: 'C:\\temp\\foo\\bar'
2.8 path.parse(path):
将路径字符串转换成路径对象。(末尾的路径定界符会被忽略)
1 //在 POSIX 上: 2 path.parse('/home/user/dir/file.txt'); 3 // 返回: 4 // { root: '/', 5 // dir: '/home/user/dir', 6 // base: 'file.txt', 7 // ext: '.txt', 8 // name: 'file' } 9 10 //在 Windows 上: 11 path.parse('C:\\path\\dir\\file.txt'); 12 // 返回: 13 // { root: 'C:\\', 14 // dir: 'C:\\path\\dir', 15 // base: 'file.txt', 16 // ext: '.txt', 17 // name: 'file' }
2.9 path.relative(from,to):
获取from路径到to路径的相对路径的路径字符串。
1 //在 POSIX 上: 2 path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); 3 // 返回: '../../impl/bbb' 4 5 //在 Windows 上: 6 path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'); 7 // 返回: '..\\..\\impl\\bbb'
2.10 path.resolve([...path]):
将路径片段转换成绝对路径字符串。如果没有传参则返回当前工作路径的绝对路径。
1 path.resolve('/foo/bar', './baz'); 2 // 返回: '/foo/bar/baz' 3 4 path.resolve('/foo/bar', '/tmp/file/'); 5 // 返回: '/tmp/file' 6 7 path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'); 8 // 如果当前工作目录是 /home/myself/node, 9 // 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
3.11 path.toNamespacedPath(path):
path<string>
仅在 Windows 系统上,返回给定 path
的等效名称空间前缀路径。 如果 path
不是字符串,则将返回 path
而不进行修改。
二、Path模块API解析(属性)
3.1 path.delimiter
用来获取当前系统的路径定界符。
console.log(path.delimiter); // Windows -- 打印:; // POSIX -- 打印::
可以使用定界符来拆分多个路径组合的字符串:
1 console.log(process.env.PATH); 2 // POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' 3 // Windows -- // 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' 4 5 //使用path.delimiter拆分路径组合字符串 6 process.env.PATH.split(path.delimiter); 7 // POSIX -- 返回: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin'] 8 // Windows 返回: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
3.2 path.posix:
用来作为POSIX平台上的path模块方法的特定访问。例如path.basename()方法在POSIX上的可以这样调用:
path.posix.basename('/tmp/myfile.html'); // 返回: 'myfile.html'
3.3 path.sep:
该属性用于获取平台特定的路径片段分隔符。
windows上是 \ 。
POSIX上是 / 。
3.4 path.win32:
用来作为Windows平台上的path模块方法的特定访问。例如path.basename()方法在Windows上可以这样调用:
path.win32.basename('\\tmp\\myfile.html'); // 返回: 'myfile.html'