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

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

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

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

获取路径

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

ini 复制代码
const path = require('path')
const fpath = '/aaa/bbb/ccc.js'

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

获取文件名

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

javascript 复制代码
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') );

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

arduino 复制代码
// 输出: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' ) );

获取文件扩展名

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

arduino 复制代码
// 输出:.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. 路径为空,返回.
less 复制代码
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方法

javascript 复制代码
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,就是最终的结果

javascript 复制代码
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的相互转换

css 复制代码
linux:/root/a/b/c.txt
{
    root: "/",
    dir: "/a/b",
    base: "c.txt",
    name: "c",
    ext: "txt"
}
vbnet 复制代码
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指向同个路径,那么,返回空字符串。
lua 复制代码
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实现

相关推荐
码云之上1 小时前
从一个截图函数到一个 npm 包——pdf-snapshot 的诞生记
前端·node.js·github
Kel3 小时前
Pi Monorepo Stream Event Flow 深度分析
人工智能·架构·node.js
米丘4 小时前
Connect 深度解析:Node.js 中间件框架的基石
javascript·http·node.js
yichudu5 小时前
nodejs 介绍
node.js
Ztopcloud极拓云视角7 小时前
Claude Code 源码泄露事件技术复盘:npm sourcemap 配置失误的完整分析
前端·npm·node.js
天下无贼!8 小时前
【功能实现】基于Vue3+TS实现大文件分片上传
开发语言·javascript·node.js·vue·html5
zhensherlock8 小时前
Protocol Launcher 系列:Agenda 优雅组织你的想法与日程
javascript·macos·ios·typescript·node.js·mac·ipad
吴声子夜歌9 小时前
Node.js——Express详解(二)
node.js·express
Moshow郑锴11 小时前
npm国内镜像加速之使用 nrm 工具(灵活切换,适合多环境)
前端·npm·node.js
吴声子夜歌12 小时前
Node.js——Express详解(一)
node.js·express