对于前端开发的同学相信大家都会用过path这个模块去解析路径,比较遗憾的是,以往都只是百度其某个方法的用法,没有完整的去看过接口文档,导致现在阅读一些代码的时候碰到path的其他方法一脸懵逼,所以趁着项目不忙去看了一下官方文档并做个笔记。以下示例大多来自官方文档。
path.basename(path)
参数:
- arg1:字符串类型路径(非字符串类型报错)
- arg2:可选参数,文件拓展名
返回值:arg1的最后一部分
由于此方法在不同的系统解析windows路径出现不一样的效果,可使用path.win32.basename方法代替此方法。
// mac os环境
var path = require('path');
console.log(path.basename('C:/windows/'));
console.log(path.basename('C:\\windows\\test.js'));
console.log(path.basename('C:/windows/test.js'));
console.log(path.basename('C:/windows/test.js', '.js'));
console.log(path.win32.basename('C:/windows/'));
console.log(path.win32.basename('C:\\windows\\test.js'));
console.log(path.win32.basename('C:/windows/test.js'));
console.log(path.win32.basename('C:/windows/test.js', '.js'));
// 结果
/*
windows
C:\windows\test.js
test.js
test
windows
test.js
test.js
test
*/
// windows 10 环境
const path = require('path');
console.log(path.basename('C:\\windows\\test.js'));
console.log(path.basename('C:/windows/test.js'));
console.log(path.win32.basename('C:\\windows\\test.js'));
console.log(path.win32.basename('C:/windows/test.js'));
// 结果
/*
test.js
test.js
test.js
test.js
*/
path.delimiter
参数:多个路径合并的字符串
返回值:系统所用的多个路径合并的分隔符,(POSIX标准系统返回值为':',Windows系统返回值为:';')
console.log(process.env.PATH);
console.log(process.env.PATH.split(path.delimiter));
// mac os
/*
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
[ '/usr/local/bin', '/usr/bin', '/bin', '/usr/sbin', '/sbin' ]
*/
path.dirname(path)
参数:表示路径的字符创
返回值:返回路径所在的目录
path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf'
path.extname(path)
参数:表示路径的字符串
返回值:返回路径的拓展名
path.extname('index.html');
// Returns: '.html'
path.extname('index.coffee.md');
// Returns: '.md'
path.extname('index.');
// Returns: '.'
path.extname('index');
// Returns: ''
path.extname('.index');
// Returns: ''
path.format(Object)
参数:Object,具体属性如下:
{
dir: string, // 路径
root: string, // 根路径,dir存在时会忽略此参数
base: string, // 文件全名,为`${name}.${ext}`
name: string, // 文件名,base存在时会忽略此参数
ext: string // 文件拓展名,base存在时会忽略此参数
}
返回值:一个格式化路径字符串(不同系统采用的分隔符不一样,POSIX标准系统是'/',Windows是'\\')
console.log(path.format({
dir: 'home/user/dir',
root: '/test',
base: 'file.txt',
name: 'anotherFile',
ext: 'md'
}));
// home/user/dir/file.txt
path.isAbsolute(path)
参数:路径字符串
返回值:参数是绝对路径则返回true,否则返回false
path.join([...paths])
参数:字符串数组(如果字符串为空会被忽略,'.'表示当前路径,'..'表示父级路径)
返回值:路径字符串(注意不是绝对路径)
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// throws 'TypeError: Path must be a string. Received {}'
path.normalize(path)
参数:路径字符串
返回值:返回标准路径字符串
// POSIX
path.normalize('/foo/bar//baz/asdf/quux/..');
// Returns: '/foo/bar/baz/asdf'
// Windows
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// Returns: 'C:\\temp\\foo\\'
path.win32.normalize('C:temp\\\\/\\/\\/foo/bar');
// Returns: 'C:\\temp\\foo\\bar'
path.parse(path)
参数:路径字符串
返回值:Object(即path.format方法的参数)
path.posix
此对象提供POSIX系统指定的path方法实现,即跟path.win32相对
path.relative(from, to)
参数:
- from:路径字符串
- to:路径字符串
返回值:返回from路径到to路径的相对路径
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// Returns: '../../impl/bbb'
path.resolve([...paths])
参数:路径字符串数组
返回值:由参数路径组成的一个绝对路径,组成规则如下:
- 从右往左拼接字符串,如果此过程中拼接结果出现绝对路径,则停止解析,返回此绝对路径;
- 若从右往左拼接字符串都没有出现绝对路径,则以process.cwd()路径作为前缀返回拼接结果
path.resolve('/foo/bar', './baz');
// Returns: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// Returns: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// if the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'
path.sep
此属性返回系统的路径分隔符,Windows为'\',POSIX为'/'
path.toNamespacedPath(path)
此方法仅供Windows系统使用,用于返回一个命名空间前端的一个路径,如果传入的参数不是字符串,则返回此参数。
path.win32
与path.posix对象相对,提供Windows系统特定的path方法实现。