Node.js基础 - path

127 阅读2分钟

path 常用方法

用于处理文件/目录的路径

const path = require('path')

path.basename() 获取路径中的基础名称

  • 返回的就是接收路径当中的最后一部分
  • 第二个参数表示扩展名,如果说没有设置则返回完整的文件名称带后缀
  • 第二个参数做为后缀时,如果没有在当前路径中被匹配到,那么就会忽略
  • 处理目录路径的时,结尾处有路径分割符,则会被忽略掉
console.log(path.basename(__filename)) // __filename 当前文件的完整路径
console.log(path.basename(__filename, '.js'))
console.log(path.basename(__filename, '.css'))
console.log(path.basename('/a/b/c'))
console.log(path.basename('/a/b/c/'))

// path.js
// path
// path.js
// c
// c

path.dirname() 获取路径目录名 (路径)

  • 返回路径中最后一个部分的上一层目录所在路径
  • 结尾处有路径分割符,则会被忽略掉
console.log(path.dirname(__filename))
console.log(path.dirname('/a/b/c'))
console.log(path.dirname('/a/b/c/')) 

// D:/node
// /a/b
// /a/b

path.extname() 获取路径的扩展名

  • 返回 path路径中相应文件的后缀名
  • 如果 path 路径当中存在多个点,它匹配的是最后一个点,到结尾的内容
console.log(path.extname(__filename))
console.log(path.extname('/a/b'))
console.log(path.extname('/a/b/index.html.js.css'))
console.log(path.extname('/a/b/index.html.js.')) 

// .js
// 
// .css
// .

path.parse() 解析路径

  • 接收一个路径,返回一个对象,包含不同的信息
  • { root: '根路径', dir: '文件路径', base: '文件名 + 后缀名', ext: '后缀名', name: '文件名' }
let obj = path.parse('/a/b/c/index.html')
console.log(obj)
// {
//  root: '/',
//  dir: '/a/b/c',
//  base: 'index.html',
//  ext: '.html',
//  name: 'index
// }

let obj = path.parse('/a/b/c/')
console.log(obj)
// ext: '' 忽略最后一个/,没有后缀名

let obj = path.parse('./a/b/c/')
console.log(obj)
// root: '' 相对路径没有根目录

path.parse() 序列化路径

  • 传入解析的路径信息 返回完整路径
const obj = path.parse('./a/b/c/')
console.log(path.format(obj))

// ./a/b/c

path.isAbsolute() 判断当前路径是否为绝对

console.log(path.isAbsolute('foo'))
console.log(path.isAbsolute('/foo'))
console.log(path.isAbsolute('///foo'))
console.log(path.isAbsolute(''))
console.log(path.isAbsolute('.'))
console.log(path.isAbsolute('../bar'))

// false 
// true
// true 多/ 会视为一个
// false
// false
// false

path.join() 拼接路径

  • 接收多个路径片段 从后向前组合
console.log(path.join('a/b', 'c', 'index.html'))
console.log(path.join('/a/b', 'c', 'index.html'))
console.log(path.join('/a/b', 'c', '../', 'index.html'))
console.log(path.join('/a/b', 'c', './', 'index.html'))
console.log(path.join('/a/b', 'c', '', 'index.html'))
console.log(path.join('')) 

// a/b/c/index.html 相对路径
// /a/b/c/index.html 绝对路径
// /a/b/index.html ../会被执行
// /a/b/c/index.html ./被识别 同级目录
// /a/b/c/index.html ''会被忽略
// . 当前工作目录

path.normalize() 规范化路径

  • 结束一个路径 处理不规范特殊符号等
console.log(path.normalize(''))
console.log(path.normalize('a/b/c/d'))
console.log(path.normalize('a///b/c../d'))
console.log(path.normalize('a//\\/b/c\\/d'))
console.log(path.normalize('a//\b/c\\/d'))

// .
// a/b/c/d
// a/b/c../d ../不会处理
// a/b/c/d
// a/c/d \b 会被处理

path.resolve() 绝对路径

  • resolve([from], to)
  • to 可以认为把to的部分拼接为绝对路径 如果拼接完成不是绝对路径 就把当前工作目录拼接上
  • from 是否工作取决于具体参数 。。。
console.log(path.resolve()) // 如果没有参数 则会返回当前工作目录的绝对路径
// 当前工作目录的绝对路径

console.log(path.resolve('a', 'b')) // 拼接后返回绝对路径
// D:/目录/a/b

console.log(path.resolve('a', '/b')) // 如果最后参数为绝对路径 直接返回盘 + 路径
console.log(path.resolve('/a', '/b'))
// D:/b
// D:/b
console.log(path.resolve('/a', 'b'))
// D:/a/b 

console.log(path.resolve('index.html'))
// D:/目录/index.html

如有问题 欢迎指出 未完 。。