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 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
智通2 天前
Node.js事件循环核心机制
node.js
初圣魔门首席弟子2 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
糖拌西瓜皮2 天前
Java 开发者如何快速上手 Node.js:一份从入门到进阶的学习路线
node.js
yspwf2 天前
NestJS 配置管理完整方案
后端·架构·node.js
网络点点滴2 天前
Node.js事件驱动架构
架构·node.js
weixin_471383032 天前
Node.js + Express 入门实战笔记-01-基础
node.js·lua·express
Rain5093 天前
2.2 数据基础:数据库集成与 ORM(TypeORM / Prisma)
数据库·人工智能·ai·数据分析·node.js·自动化·ai编程
大家的林语冰3 天前
npm 不忍了,正式上线“阶段式发布“的新功能,进一步对抗频繁的供应链攻击!
前端·javascript·node.js
天蓝色的鱼鱼3 天前
Node.js 现在能直接跑 TypeScript 了,tsx 和 ts-node 还需要吗?
前端·typescript·node.js