广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Node.js中路径处理模块path详解
  • 166
分享到

Node.js中路径处理模块path详解

详解路径模块 2022-06-04 17:06:44 166人浏览 薄情痞子
摘要

前言 在node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性,将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。下面我们就来详细介绍下关于

前言

node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性,将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。下面我们就来详细介绍下关于node.js中的路径处理模块path。

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

获取路径:path.dirname(filepath)

获取文件名:path.basename(filepath)

获取扩展名:path.extname(filepath)

获取所在路径

例子如下:


var path = require('path');
var filepath = '/tmp/demo/js/test.js';

// 输出:/tmp/demo/js
console.log( path.dirname(filepath) );

获取文件名

严格意义上来说,path.basename(filepath) 只是输出路径的最后一部分,并不会判断是否文件名。

但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。


var path = require('path');

// 输出:test.js
console.log( path.basename('/tmp/demo/js/test.js') );

// 输出:test
console.log( path.basename('/tmp/demo/js/test/') );

// 输出:test
console.log( path.basename('/tmp/demo/js/test') );

如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。


// 输出:test
console.log( path.basename('/tmp/demo/js/test.js', '.js') );

获取文件扩展名

简单的例子如下:


var path = require('path');
var filepath = '/tmp/demo/js/test.js';

// 输出:.js
console.log( path.extname(filepath) );

更详细的规则是如下:(假设 path.basename(filepath) === B )

从B的最后一个.开始截取,直到最后一个字符。

如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串

直接看官方文档的例子


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

路径组合


path.join([...paths])
path.resolve([...paths])

path.join([...paths])

把paths拼起来,然后再nORMalize一下。这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。

例子如下:


var path = require('path');

// 输出 '/foo/bar/baz/asdf'
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');

path定义的伪代码如下:


module.exports.join = function(){
 var paths = Array.prototye.slice.call(arguments, 0);
 return this.normalize( paths.join('/') );
};

path.resolve([...paths])

这个接口的说明有点??隆D憧梢韵胂笙衷谀阍?hell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。

比如 path.resolve('/foo/bar', './baz') 可以看成下面命令的结果


cd /foo/bar
cd ./baz

更多对比例子如下:


var path = require('path');

// 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve('') )

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve('.') )

// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz') );

// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz/') );

// 输出 /tmp/file
console.log( path.resolve('/foo/bar', '/tmp/file/') );

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js
console.log( path.resolve('www', 'js/upload', '../mod.js') );

路径解析

path.parse(path)

path.normalize(filepath)

从官方文档的描述来看,path.normalize(filepath) 应该是比较简单的一个api,不过用起来总是觉得没底。

为什么呢?API说明过于简略了,包括如下:

如果路径为空,返回.,相当于当前的工作路径。

将对路径中重复的路径分隔符(比如linux下的/)合并为一个。

对路径中的.、..进行处理。(类似于shell里的cd ..)

如果路径最后有/,那么保留该/。

感觉stackoverflow上一个兄弟对这个API的解释更实在,原文链接。


In other Words, path.normalize is "What is the shortest path I can take that will take me to the same place as the input"

代码示例如下。建议读者把代码拷贝出来运行下,看下实际效果。


var path = require('path');
var filepath = '/tmp/demo/js/test.js';

var index = 0;

var compare = function(desc, callback){
 console.log('[用例%d]:%s', ++index, desc);
 callback();
 console.log('n');
};

compare('路径为空', function(){
 // 输出 .
 console.log( path.normalize('') );
});

compare('路径结尾是否带/', function(){
 // 输出 /tmp/demo/js/upload
 console.log( path.normalize('/tmp/demo/js/upload') );

 // /tmp/demo/js/upload/
 console.log( path.normalize('/tmp/demo/js/upload/') );
});

compare('重复的/', function(){
 // 输出 /tmp/demo/js
 console.log( path.normalize('/tmp/demo//js') );
});

compare('路径带..', function(){
 // 输出 /tmp/demo/js
 console.log( path.normalize('/tmp/demo/js/upload/..') );
});

compare('相对路径', function(){
 // 输出 demo/js/upload/
 console.log( path.normalize('./demo/js/upload/') );

 // 输出 demo/js/upload/
 console.log( path.normalize('demo/js/upload/') );
});

compare('不常用边界', function(){
 // 输出 ..
 console.log( path.normalize('./..') );

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

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

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

文件路径分解/组合

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

path.parse(filepath) :path.format()方法的反向操作。

我们先来看看官网对相关属性的说明。

首先是linux下


┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" / home/user/dir / file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)

然后是windows


┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" C:  pathdir  file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)

path.format(pathObject)

阅读相关API文档说明后发现,path.format(pathObject)中,pathObject的配置属性是可以进一步精简的。

根据接口的描述来看,以下两者是等价的。

root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。

base vs name+ext:两者可以互相替换。


var path = require('path');

var p1 = path.format({
 root: '/tmp/', 
 base: 'hello.js'
});
console.log( p1 ); // 输出 /tmp/hello.js

var p2 = path.format({
 dir: '/tmp', 
 name: 'hello',
 ext: '.js'
});
console.log( p2 ); // 输出 /tmp/hello.js

path.parse(filepath)

path.format(pathObject) 的反向操作,直接上官网例子。

四个属性,对于使用者是挺便利的,不过path.format(pathObject) 中也是四个配置属性,就有点容易搞混。


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

获取相对路径

接口:path.relative(from, to)

描述:从from路径,到to路径的相对路径。

边界:

如果from、to指向同个路径,那么,返回空字符串。

如果from、to中任一者为空,那么,返回当前工作路径。

上例子:


var path = require('path');

var p1 = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
console.log(p1); // 输出 "../../impl/bbb"

var p2 = path.relative('/data/demo', '/data/demo');
console.log(p2); // 输出 ""

var p3 = path.relative('/data/demo', '');
console.log(p3); // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"

平台相关接口/属性

以下属性、接口,都跟平台的具体实现相关。也就是说,同样的属性、接口,在不同平台上的表现不同。

path.posix:path相关属性、接口的linux实现。

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

path.sep:路径分隔符。在linux上是/,在windows上是``。

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

注意,当使用 path.win32 相关接口时,参数同样可以使用/做分隔符,但接口返回值的分割符只会是``。

直接来例子更直观。


> path.win32.join('/tmp', 'fuck')
'\tmp\fuck'
> path.win32.sep
'\'
> path.win32.join('tmp', 'demo')
'\tmp\demo'
> path.win32.join('/tmp', 'demo')
'\tmp\demo'

path.delimiter

linux系统例子:


console.log(process.env.PATH)
// '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

process.env.PATH.split(path.delimiter)
// returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']

windows系统例子:


console.log(process.env.PATH)
// 'C:Windowssystem32;C:Windows;C:Program Filesnode'

process.env.PATH.split(path.delimiter)
// returns ['C:\Windows\system32', 'C:\Windows', 'C:\Program Files\node\']

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js能有所帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

--结束END--

本文标题: Node.js中路径处理模块path详解

本文链接: https://www.lsjlt.com/news/12902.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js中路径处理模块path详解
    前言 在node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性,将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。下面我们就来详细介绍下关于...
    99+
    2022-06-04
    详解 路径 模块
  • 解读node.js中的path路径模块
    目录1. 什么是 path 路径模块2. 路径拼接3. 获取路径中的文件名 4. 获取路径中的文件扩展名5. 综合案例 -...
    99+
    2023-01-28
    node.js path path路径模块 path模块
  • 详解nodeJS之路径PATH模块
    前面的话 path模块包含一系列处理和转换文件路径的工具集,通过 require('path') 可用来访问这个模块。本文将详细介绍path模块 路径组成 【path.dirname(p)】 返回路径p所...
    99+
    2022-06-04
    详解 路径 模块
  • Node.js 中常用内置模块(path 路径模块)
    目录前言路径拼接:join方法获取文件名:basename方法获取文件扩展名:extname方法结语前言 进行服务端开发,少不了对各种路径的处理,之前我们是简单粗暴的使用字符串的方法...
    99+
    2022-11-13
  • Nodejs中如何使用path路径处理模块
    这篇文章将为大家详细讲解有关Nodejs中如何使用path路径处理模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取路径/文件名/扩展名获取路径:pat...
    99+
    2022-10-19
  • Python文件路径处理模块pathlib示例详解
    目录1. 为什么需要pathlib2. pathlib的使用2.1 创建路径2.2 读写文件2.3 路径的属性2.4 移动和删除文件3. 操作系统的差异附:pat...
    99+
    2023-05-14
    python 路径处理 文件路径 python python pathlib模块
  • Node.js 中的 fs 模块与Path模块方法详解
    概述: 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。可以通过调用 require("fs") 来获取该模块。文件系统模块中的所有方法均有异步和同步版本。...
    99+
    2022-11-12
  • node中path路径模块的API有哪些
    本文小编为大家详细介绍“node中path路径模块的API有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“node中path路径模块的API有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2022-10-19
  • 深入理解node.js之path模块
    node之path模块 //引用该模块 var path = require("path"); 1、路径解析,得到规范化的路径格式 //对window系统,目录分隔为'', 对于UNIX系统,分隔...
    99+
    2022-06-04
    模块 node js
  • Node中的fs文件模块和path路径模块怎么使用
    这篇“Node中的fs文件模块和path路径模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的fs文件模...
    99+
    2023-07-04
  • 如何在 Python 中使用 path 模块来管理文件路径?
    当你在 Python 中需要操作文件时,了解如何管理文件路径是非常重要的。Python 的 pathlib 模块提供了一种更加面向对象的方式来管理文件路径,而且它比传统的字符串处理方式更加安全和直观。在本文中,我们将介绍如何使用 pathl...
    99+
    2023-10-09
    接口 path 日志
  • Node.js基础入门之path模块,url模块,http模块使用详解
    目录path模块1. path模块示例2. path模块其他方法url模块1. 旧的解析方法2. 新的解析方法http模块1. 什么是HTTP协议?2. HTTP协议约束的细节3. ...
    99+
    2022-11-13
  • Node.js中的模块路径是怎样的
    这篇文章主要介绍“Node.js中的模块路径是怎样的”,在日常操作中,相信很多人在Node.js中的模块路径是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.j...
    99+
    2022-10-19
  • 详解Node.js如何处理ES6模块
    目录一、两种模块的差异二、Node.js 的区分三、CommonJS 模块加载 ES6 模块四、ES6 模块加载 CommonJS 模块五、同时支持两种格式的模块一、两种模块的差异 ...
    99+
    2022-11-12
  • 一文聊聊Node中的fs文件模块和path路径模块(案例分析)
    fs.readFile(path, [options], callback)示例1:读取 demo.txt 文件demo.txt 文件'前端杂货铺'app.js 文件// 导入 fs 文件系统模块 const fs = re...
    99+
    2022-11-22
    node nodejs​ Node.js
  • 一文带你了解Node.js中的path模块
    目录1 path模块1.1 path.join()1.2 path.resolve()1.3 path.normalize()1.4 path.dirname()1.5 path.b...
    99+
    2023-03-21
    Node.js path模块使用 Node.js path模块 Node.js path
  • 什么是Python中的path模块?如何使用它来管理文件路径?
    Python是一种高级编程语言,它拥有广泛的应用领域,例如数据分析、机器学习、网络爬虫等。在这些应用中,文件操作是非常常见的操作。Python提供了一个path模块,它可以帮助我们管理文件路径。本文将介绍path模块的基本知识和使用方法。 ...
    99+
    2023-06-05
    容器 path 异步编程
  • Python文件路径处理模块pathlib怎么使用
    这篇文章主要介绍了Python文件路径处理模块pathlib怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python文件路径处理模块pathlib怎么使用文章都会有所收获,下面我们一起来看看吧。1. ...
    99+
    2023-07-05
  • Node.js中HTTP模块与事件模块详解
    Node.js的http服务器 通过使用HTTP模块的低级API,Node.js允许我们创建服务器和客户端。刚开始学node的时候,我们都会遇到如下代码: var http = require('http...
    99+
    2022-06-04
    模块 详解 事件
  • Bash中的Go Path和NPM路径设置步骤详解!
    在Bash中,Go和NPM是两个非常常用的工具。Go是一种编程语言,NPM是一个包管理器,用于在Node.js中安装和管理软件包。对于想要使用这两个工具的人来说,正确设置它们的路径是至关重要的。 本文将详细介绍如何在Bash中设置Go P...
    99+
    2023-08-30
    path bash npm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作