likes
comments
collection
share

node基础模块常用api(一) -- path模块api

作者站长头像
站长
· 阅读数 2

使用path模块需要导入,const path = require('path')

一、获取路径/文件名/文件扩展名

  • 获取路径:path.dirname(fpath)
  • 获取文件名: path.basename(fpath)
  • 获取文件扩展名: path.extname(fpath)
  • 获取文件所在文件夹绝对路径:__dirname
  • 获取文件所在绝对路径: __filename

获取路径

可以理解为,获取的是最后一个斜杠前面的部分

const path = require('path')
const fpath = '/aaa/bbb/ccc.js'

// 输出:/aaa/bbb
console.log( path.dirname(fpath) );

获取文件名

可以理解为,获取的是最后一个斜杠后面的部分

const path = require('path');

// 输出:ccc.js
console.log( path.basename('/aaa/bbb/ccc.js') );

// 输出:ccc.js.md
console.log( path.basename('/aaa/bbb/ccc.js.md') );

// 输出:ccc
console.log( path.basename('/aaa/bbb/ccc') );

可以传入第二个参数,来忽略后缀

// 输出:ccc.js
console.log( path.basename('/aaa/bbb/ccc.js.md', '.md' ) );

// 输出:ccc.j
console.log( path.basename('/aaa/bbb/ccc.js.md', 's.md' ) );

获取文件扩展名

获取最后一个.后的所有内容,如果不存在.或者只有一个.并且是字符串第一个字符,则返回空字符串

// 输出:.js
console.log( path.extname('/aaa/bbb/ccc.js') );

// 输出:.md
console.log( path.extname('/aaa/bbb/ccc.js.md') );

// 输出:.b
console.log( path.extname('.a.b') );

// 输出:
console.log( path.extname('.a') );

// 输出:
console.log( path.extname('/aaa') );

二、路径格式化

path.normalize(filepath)

这个api主要的功能,是为了去掉路径中重复的路径分隔符,具体有以下功能:

  1. 去掉重复的路径分隔符
  2. 模拟'.','..'功能
  3. 路径最后有/,那么保留该/
  4. 路径为空,返回.
const path = require('path')

// 输出 '.'
console.log( path.normalize('') );

// 输出 /a/b/c
console.log( path.normalize('/a/b/c') );

// 输出 /a/b/c/
console.log( path.normalize('/a/b/c/') );

// 输出 /a/b/c
console.log( path.normalize('////a/////b//c') );

// 输出 /a/b/c
console.log( path.normalize('/a/b/c/d/..') );

// .与..

// 输出 ..
console.log( path.normalize('./..') );

// 输出 ..
console.log( path.normalize('..') );

// 输出 ../
console.log( path.normalize('../') );

// 输出 /
console.log( path.normalize('/../') );

// 输出 /
console.log( path.normalize('/..') );

三、路径拼接

path.join([...paths])

用路径分隔符把数组用的每一项拼接,再调用上面的normalize方法

const path = require('path')

// 输出 a/b/c/d/e
console.log(path.join('/a', 'b', 'c/d', 'e'));

// 输出 a/c/d/e
console.log(path.join('/a', 'b', '../c/d', 'e'));

path.resolve([...paths])

把数组的每一项执行 cd path,就是最终的结果

const path = require('path')

// 输出 当前所在目录的绝对路径
console.log( path.resolve('') )

// 输出 当前所在目录的绝对路径
console.log( path.resolve('.') )

// 输出 /a/b/c
console.log( path.resolve('/a/b', './c') );

// 输出 /c
console.log( path.resolve('/a/b', '/c') );

// 输出 当前所在目录的绝对路径/a/b/d
console.log( path.resolve('a', 'b/c', '../d') );

解释一下path.resolve('/a/b', './c')

  1. cd /a/b
  2. cd ./c
  3. 得到 /a/b/c

解释一下path.resolve('a', 'b/c', '../d')

  1. cd a,注意没有/,所以是在当前所在绝对路径中进入a
  2. cd b/c,进入b再进入c
  3. cd ../d, ../返回上一层,相当于b,再进入d
  4. 得到 绝对路径/a/b/d

四、路径分解/组合

path.format(pathObject)

将pathObject的root、dir、base、name、ext属性,按照一定的规则,组合成一个文件路径。

path.parse(filepath)

path.format()方法的反向操作,把路径分割为pathObject

什么是pathObject?

pathObject就是用root、dir、base、name、ext这几个属性代表字符串路径

看不同系统平台下对于pathObject的相互转换

linux:/root/a/b/c.txt
{
    root: "/",
    dir: "/a/b",
    base: "c.txt",
    name: "c",
    ext: "txt"
}
windows: C:\a\b\c.txt
{
    root: "C:\",
    dir: "\a\b",
    base: "c.txt",
    name: "c",
    ext: "txt"
}

五、 获取相对路径

path.relative(from, to)

  • 官方点的解释:返回从formto 的相对路径
  • 白话解释:从fromto,通过cd xxxxx可以直接到达,返回xxxxx

特殊情况

  • 如果fromto指向同个路径,那么,返回空字符串。
const path = require('path');

// 输出 "../..//f"
console.log( path.relative('/a/b/c/d', '/a/b/e/f') );  

// 输出 ""
console.log( path.relative('/a/b', '/a/b') );  

// ’‘代表当前所在目录的绝对路径
// 输出 ../../当前所在目录的绝对路径
console.log( path.relative('/a/b', '') );

// 输出 多个../直到回到根目录/a/b
console.log( path.relative('', '/a/b') );  

平台相关接口/属性

path.sep

路径分隔符。在linux上是/,在windows上是``

path.delimiter

path设置的分割符。linux上是:,windows上是;

path.posix

path相关属性、接口的linux实现

path.win32

path相关属性、接口的win32实现

转载自:https://juejin.cn/post/7331616981976006668
评论
请登录