Node path模块

对于前端开发的同学相信大家都会用过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])

参数:路径字符串数组

返回值:由参数路径组成的一个绝对路径,组成规则如下:

  1. 从右往左拼接字符串,如果此过程中拼接结果出现绝对路径,则停止解析,返回此绝对路径;
  2. 若从右往左拼接字符串都没有出现绝对路径,则以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方法实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值