当前版本:v 10.16.0

一,获取文件相关信息

1,path.basename(filepath[, ext])

获取该文件的文件名,如果有扩展名,则一起显示扩展名;

如果不想展示扩展名,只想展示文件名,那么第二个参数可选,传入具体的文件扩展名,返回文件名而不包括扩展名。

path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux'

2,path.dirname(filepath)

获取该文件所在的目录

path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf'

3,path.extname(filepath)

获取该文件的扩展名,需要注意的是,如果传入的路径以“.”符号结束,则返回“.”,如果最后没有“.”符号,则输出空,如果以“.”符号开头,也输出空。

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: ''

二,将文件路径组合拼接

1,path.join([...paths])

把传入的path拼起来,再执行path.normalize,注意,这个返回的不是绝对路径,只是拼起来的path,然后经过了normalize的处理

// slb文件位置在/Users/yanchenyu/github/node-soa-server/middleware/slb

// 此时我们在node-soa-server下执行命令

path.join('./middleware', 'slb')
// middleware/slb
// 不是绝对路径,只是拼起来的path path.resolve('./middleware', 'slb')
// /Users/yanchenyu/github/node-soa-server/middleware/slb

2,path.resolve([...paths])

这个方法是用得最多的,一般path模块都是用这个方法,返回的是绝对路径,如果看返回值,有个很笨但是很有用的方法,就是等同于直接在shell下依次敲命令cd path,比如:

path.resolve('/foo/bar', './baz');

// 等同于

cd /foo/bar
cd ./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.resolve会去掉末尾的/,而path.join不会,原因就是path.normalize会保留末尾/,但两者都会去掉中间多余的/

path.resolve('.//middleware', 'slb/')
// /Users/yanchenyu/github/node-soa-server/middleware/slb path.join('.//middleware', 'slb/')
// middleware/slb/

3,path.normalize(path)

这个就是刚刚path.join内部操作的最后一步,它主要是将一些不合理的path给规范化,比如:

1️⃣去除重复的/

上面给过例子了,不再说

2️⃣path中有.或..的,按cd .或cd ..处理

path.normalize('/middleware/./slb/.././')

// /middleware/

3️⃣末尾的/不变,有就保留没有就去掉,保持一致

三,文件路径的拆分和聚合,按对象来处理

1,path.parse(path)

返回的是一个pathObject对象,有五个属性(root, dir, base, ext, name):

path.parse('/home/user/dir/file.txt');
// Returns:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }

2,path.format(pathObject)

传入pathObject,有五个属性(可选),刚好是上面的五个

const pathObject = { root: '/',
dir: '/home/user/dir',
base: 'file.txt',
ext: '.txt',
name: 'file' }; path.format(pathObject); // /home/user/dir/file.txt

四,路径解析

path.relative(from, to)

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// Returns: '../../impl/bbb'

总结:

path模块主要是用来处理文件路径的相关操作,主要比较常用的还是resolve,然后包括上面提到的这几个api,还有几个不常用的可以参考官方文档。

end

Nodejs模块:path的更多相关文章

  1. NodeJS之path模块

    NodeJS之path模块 常用的主要有如下工具函数: 1. path.basename(path[, ext]) 2. path.extname(path) 3. path.dirname(path ...

  2. # nodejs模块学习: express 解析

    # nodejs模块学习: express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子 ...

  3. NodeJS 模块开发及发布详解

    NodeJS 是一门年轻的语言,扩展模块并不太全,经常我们想用某个模块但是却找不到合适的.比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的 ...

  4. node的核心模块path

    //导入模块path var path=require("path"); //path.basename :输出文件名+后缀 //console.log(path.basename ...

  5. Nodejs:Path对象

    模块Path: path.normalize(url) path.join(url1, url2, ..) path.resolve(url1, url2, ..) path.relative(url ...

  6. NodeJS模块、包、NPM

    1.NodeJS模块        每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件. a.模块的应用               新建一个文件mytest. ...

  7. 核心模块Path

    核心模块Path 作用:用于帮助程序员来操作硬盘上的路径. 核心模块注意点:当引用核心模块的时候直接require('模块名'),不需要加任何路径或者后缀. Path中的常用API: dirname( ...

  8. nodejs模块xml2js解析xml的坑

    在一个项目中,用到nodejs模块xml2js解析xml,xml的数据如下: <xml> <MsgId>6197906553041859764</MsgId> &l ...

  9. NodeJS 模块&函数

    NodeJS 模块&函数 nodejs的多文件操作通过模块系统实现,模块和文件一一对应.文件本身可以是javascript代码.JSON或编译过的C/C++扩展 基本用法 nodeJS通过ex ...

  10. es6模块 nodejs模块和 typescript模块

    es6模块 import和export nodejs模块 require和module.exports typescript模块 module和export

随机推荐

  1. 4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT

    第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右 ...

  2. luogu 3188 [HNOI2007]梦幻岛宝珠

    LINK:梦幻岛宝珠 时隔多日 我再次挑战这道题.还是以失败告终. 我觉得这一道背包真的有点难度 这是一个数量较少 但是价值和体积较大的背包. 通常的01背包 要不就是体积小 要么是价值小 但这道题给 ...

  3. 【NOI2017】游戏 题解(2-SAT+缩点)

    题目链接 题目大意:有四种场地$a,b,c,x$和三种赛车$A,B,C$,$a$不能跑$A$,$b$不能跑$B$,$c$不能跑$C$,$x$都可以跑.给定$n$个场地和$m$个四元组$(i,h_i,j ...

  4. ios签名app稳定不掉签技术详细教程详解

    iOS签名是专门针对ios的APP内测的数字签名,是苹果面向开发者提出的一箱机制. 因为现在苹果APP下载渠道只有App Store,还可以加上一个内测用的testflight,也就是说,除了这两个官 ...

  5. python文件的执行

    python文件的后缀名没有限制,但是为了后来导入模版的规范性,python代码通常以".py"作为后缀: python文件运行 一般情况都是解释器+文件名,如:python ** ...

  6. Qt使用MD5加密

    Qt中包含了大部分常用的功能,比如json.数据库.网络通信.串口通信以及今天说的这个MD5加密: Qt中将字符串进行MD5加密其实比较简单,代码如下: #include <QCoreAppli ...

  7. JS 获取验证码按钮改变案例

    HTML代码 <div class="box"> <label for="">手机号</label> <input t ...

  8. Java不可不知的泛型使用

    前面的文章: 详解Java的对象创建 一文打尽Java继承的相关问题 一文打尽Java抽象类和接口的相关问题 本文介绍了Java的泛型的基本使用. 1. 为什么使用泛型 看下面一个例子: 为了说明问题 ...

  9. java web工程导入jar包流程,容易犯错

    1)首先把jar包拷贝到WEB-INF/lib下 2)在Eclipse中web/WEB-INF/lib路径下刷新.(省略此步骤就会找不到) 3)Java Build Path中Remove掉Web A ...

  10. 使用Python语言通过PyQt5和socket实现UDP服务器

    前言 最近做了一个小软件,记录一下相关内容. 已有条件 现在已有一个硬件设备作为客户端(暂称其为"电路"). 基于SIM卡,电路可以通过UDP协议传输数据(程序已经内置在电路中), ...