• Path模块在各个系统上的差异
  • Path模块API解析

一、Path模块在各个系统上的差异

path模块提供用于处理文件路径和目录路径的使用工具。

let path = require('path')

由于node.js应用程序运行所在的系统不一样会导致path获取的路径风格不一致。比如windows与Unix上的POSIX系统操作接口就会有如下差别:

//比如path.basename()获取路径最后一部分的差异
path.basename('C:\\temp\\myfile.html');
// POSIX -- 返回: 'C:\\temp\\myfile.html'
// Windows -- 返回: 'myfile.html' //比如path.delimaiter路径界定符的差异
console.log(process.env.PATH);
// POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
// Windows -- 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

除了获取的数据值的差异,还有比如在示例中可以看到的路径定界符的差异,windows上可以有(“\\”,“//”,“/”),在POSIX系统上都采用(“/”)。

还有就是在posix系统上使用path使用path.posix属性来指定调用posix系统模式下的方法,详细见第三节3.2和3.4的内容。

二、Path模块API解析(方法)

2.1 path.basename(path[,ext]):

用来获取路径指向的节点名称。

path<string>:路径字符

ext<string>:可选扩展名;指定路径名获得路径最后一部分的获取结果会省略后缀

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

2.2 path.dirname(path)

用来获取当前路径所在目录,也就不包含最后一个路径节点和路径分隔符。

 //示例一
path.dirname('/foo/bar/baz/asdf/quux');
// 返回: '/foo/bar/baz/asdf' //示例二
path.dirname("/foo/path/index.js");
// 返回: '/foo/path'

3.3 path.extname(path)

用来获取路径扩展名。

 path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.extname('.index.md');
// 返回: '.md'

2.4 path.format(pathObject)

将路径对象转换成路径字符串。对象属性包含:dir、root、base、name、ext。注意如果是使用根路径root需要在末尾添加路径分隔符,如果使用文件类型需要在文件类型名称前添加点“.”。

  • 如果提供了 pathObject.dir,则忽略 pathObject.root。(使用root时需要在尾部添加路径分隔符)
  • 如果 pathObject.base 存在,则忽略 pathObject.ext 和 pathObject.name

还需要注意在windows上拼接字符串时,手动写入分隔符时需要写入双反斜杠(\\),这在第一节的示例中已经可以看到相关内容。

 //windows上的示例
let path = require("path");
console.log( path.format({root:"root\\",name:"name",ext:".ext"}));//root\name.ext
console.log( path.format({dir:"dir",name:"name",ext:".ext"}));//dir\name.ext
console.log( path.format({root:"root\\",base:"base.txt"}));//root\base.txt
console.log( path.format({dir:"dir",base:"base.txt"}));//dir\base.txt

2.5 path.isAbsolute(path):

检测路径是否是绝对路径。

 //windows上的示例
let path = require("path");
path.isAbsolute('//server'); // true
path.isAbsolute('\\\\server'); // true
path.isAbsolute('C:/foo/..'); // true
path.isAbsolute('C:\\foo\\..'); // true
path.isAbsolute('bar\\baz'); // false
path.isAbsolute('bar/baz'); // false
path.isAbsolute('.'); // false //POSIX
path.isAbsolute('/foo/bar'); // true
path.isAbsolute('/baz/..'); // true
path.isAbsolute('qux/'); // false
path.isAbsolute('.'); // false

2.6 path.join([...path]):

将路径片段使用平台特定的分隔符作为定界符连接起来,生成符合平台规范的路径字符串。

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf' path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'

2.7 path.nornalize(path):

将传入的不规范的路径字符串处理成规范的路径字符串。比如在路径字符串中出现连续的多个定界符,可以通过nornalize()处理转换成标准的符合规范的路径字符串,比如示例:

 //例如,在 POSIX 上:
path.normalize('/foo/bar//baz/asdf/quux/..');
// 返回: '/foo/bar/baz/asdf' //在 Windows 上:
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\' path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar');
// 返回: 'C:\\temp\\foo\\bar'

2.8 path.parse(path):

将路径字符串转换成路径对象。(末尾的路径定界符会被忽略)

 //在 POSIX 上:
path.parse('/home/user/dir/file.txt');
// 返回:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' } //在 Windows 上:
path.parse('C:\\path\\dir\\file.txt');
// 返回:
// { root: 'C:\\',
// dir: 'C:\\path\\dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }

2.9 path.relative(from,to):

获取from路径到to路径的相对路径的路径字符串。

 //在 POSIX 上:
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// 返回: '../../impl/bbb' //在 Windows 上:
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');
// 返回: '..\\..\\impl\\bbb'

2.10 path.resolve([...path]):

将路径片段转换成绝对路径字符串。如果没有传参则返回当前工作路径的绝对路径。

 path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz' path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file' path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

3.11 path.toNamespacedPath(path):

path<string>

仅在 Windows 系统上,返回给定 path 的等效名称空间前缀路径。 如果 path 不是字符串,则将返回 path 而不进行修改。

二、Path模块API解析(属性)

3.1 path.delimiter

用来获取当前系统的路径定界符。

console.log(path.delimiter);
// Windows -- 打印:;
// POSIX -- 打印::

可以使用定界符来拆分多个路径组合的字符串:

 console.log(process.env.PATH);
// POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
// Windows -- // 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' //使用path.delimiter拆分路径组合字符串
process.env.PATH.split(path.delimiter);
// POSIX -- 返回: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
// Windows 返回: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

3.2 path.posix:

用来作为POSIX平台上的path模块方法的特定访问。例如path.basename()方法在POSIX上的可以这样调用:

path.posix.basename('/tmp/myfile.html');
// 返回: 'myfile.html'

3.3 path.sep:

该属性用于获取平台特定的路径片段分隔符。

windows上是 \ 。

POSIX上是 / 。

3.4 path.win32:

用来作为Windows平台上的path模块方法的特定访问。例如path.basename()方法在Windows上可以这样调用:

path.win32.basename('\\tmp\\myfile.html');
// 返回: 'myfile.html'

nodejs入门API之path模块的更多相关文章

  1. nodejs入门API之net模块

    net常用API解析以及应用 手动解析HTTP请求头 基于网络模块net与文件模块fs搭建简易的node服务 net模块部分API参数详细解析 一.net常用API解析以及简单的应用 net模块的组成 ...

  2. nodejs入门API之http模块

    HTTP上的一些API及应用 HTTP模块上的服务(server)与响应(response) HTTP模块上的消息(message) HTTP模块上的代理(agent)与请求(request) HTT ...

  3. nodejs入门API之fs模块

    fs模块下的类与FS常量 fs模块下的主要方法 fs的Promise API与FileHandle类 一.fs模块下的类 1.1 fs.Dir:表示目录流的类,由 fs.opendir().fs.op ...

  4. nodejs入门API之url模块+querystring模块

    关于URL的一些基础内容 URL模块的API解析 URL的参数URLSearchParams类 querystring模块 一.关于URL的一些基础内容 1.1 定义: 在WWW上,每一信息资源都有统 ...

  5. NodeJs 入门到放弃 — 常用模块及网络爬虫(二)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14473101.html 目录 码文不易啊,转载请带上本文链接呀,感谢感谢 https ...

  6. nodejs入门开发与常用模块

    npm:NodeJs包管理器 express:服务器端比较流行的MVC框架,处理服务请求,路由转发,逻辑处理 http://socket.io:实现服务端和客户端socket通信解决方案 ); // ...

  7. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  8. NodeJS入门(四)—— path对象

    很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...

  9. Nodejs基础:路径处理模块path总结

    模块概览 在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块.部分因为文档说的不够清晰,部分因为接口的平台差异性. 将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了. 获取 ...

随机推荐

  1. flutter编译ios的时候需要进行的操作:

    pod install  执行这个命令,安装依赖

  2. Greenwich.SR2版本的Spring Cloud Zuul实例

    网关作为对外服务,在微服务架构中是一个很重要的组件,主要体现在动态路由和接入鉴权这两个功能上.现在我们通过Spring Cloud Zuul来实现对之前a-feign-client(参见Greenwi ...

  3. MySQL数据库备份之mysqldump

    创建用户备份的用户 MariaDB [mysql]> create user 'backdata'@'localhost' identified by 'test@123456';Query O ...

  4. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_16-网关-过虑器

    4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等. 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖 ...

  5. JavaScript正则表达式补充

    定义正则表达式 /.../用于定义正则表达式 /.../g表示全局匹配 /.../i表示不区分大小写 /.../m表示多行匹配 JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m ...

  6. PAT 甲级 1042 Shuffling Machine (20 分)(简单题)

    1042 Shuffling Machine (20 分)   Shuffling is a procedure used to randomize a deck of playing cards. ...

  7. ElasticSearch——索引生命周期管理

    从ES6.6开始,Elasticsearch提供索引生命周期管理功能,索引生命周期管理可以通过API或者kibana界面配置,详情参考[index-lifecycle-management] 本文仅通 ...

  8. vmware安装密钥

    VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMware Workstation 14永久激活密钥: CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ...

  9. 使用ASP.NET Core支持GraphQL( restful 配套)

    https://github.com/graphql-dotnet https://github.com/graphql GraphQL简介 官网:https://graphql.cn/code/ 下 ...

  10. 【长期更新】Leetcode刷题心得与思考

    1.递归与动态规划的思考 Leetcode第95题 递归问题最重要的问题是想明白函数的作用是什么? 这个例子中函数的返回值就是给定a-b这个区间的数字,返回它所有可能的Tree,此时你不需要明白具体怎 ...