Node(4):内置模块 path

简介: 本文主要介绍了 node 内置模块 path 模块最常用的方法,比如 join 方法,resolve 方法等。

前言

上文讲解了 Node.js 的 CommonJS 规范,它主要用来解决模块化的问题。从本文开始将会介绍 Node.js 常用的模块,包括内置模块以及好用,好玩的第三方模块。

本篇简单介绍下 path 模块的用法。

path 模块

path 模块提供了用来处理目录和文件路径的工具方法。

目前主流的操作系统有 Windows,Mac OS 和 Linux。其中后两者都是类Unix系统,因此他们的文件系统是类似的。

这两类系统在处理目录和文件路径时存在一定差异:

  • Windows:使用 \ 、\\ 作为路径分隔符
  • Linux/Mac OS:使用 / 作为路径分隔符

如果我们在 Windows 系统上编写了程序,放到 Linux 上去运行,就有可能因为路径而出现问题。

使用 path 模块,帮助处理路径,就能避免这个问题。除了解决因差异化造成的问题,该模块还可以提供了一些常用的封装,比如要获取文件的扩展名,可以调用path.extname 方法。

path.join

用于拼接路径。

const path = require('path')

// 使用操作系统的路径分隔符,将路径拼接起来
path.join('a', 'b', 'index.js') // a\b\index.js
path.join('/a', 'b', 'index.js') // \a\b\index.js

// 会处理待拼接路径中的关系
path.join('/a', 'b', '..', 'index.js') // \a\index.js

path.resolve

返回一个绝对路径。

// 不传参数时,返回 node 命令执行时所在的目录的绝对路径,并非是当前文件模块所在的目录路径。
// 比如在 /a目录下,执行 `node index.js` 则返回 `/a`
// 若是在 /b 目录下,执行 `node /a/index.js`,返回的则是 `/b`
path.resolve()

// 由于上面的特性,在使用该方法时,通常都会加上一个全局变量 __dirname,表示当前目录的绝对路径。
// 这样就能拼接出一个我们想要的路径了
path.resolve(__dirname, 'index.js'); 

如何区分 joinresolve,两个方法都用来解析处理路径:

  • join:重点在拼接。将已知的路径拼接成一个标准的路径
  • resolve:重点在绝对路径。将已有的路径处理成一个标准的绝对路径

path.basename

返回路径中的基础名字,也就是最后一个分隔符后面的部分。

如果是目录,则返回目录名。若是文件名,默认返回带扩展名的文件名。通过指定参数 ext 决定是否带扩展名。

// 如果目录后也带分隔符,会被忽略掉
path.basename('src/utils') // utils

path.basename('src/utils/format.js') // format.js

// 通过指定第二个参数,若匹配上,则输出不带后缀的文件名
path.basename('src/utils/format.js', '.js') // format

path.dirname

获取路径目录名,也就是路径最后一部分的上级目录路径。

path.dirname('src/utils/format.js') // src/utils

path.dirname('src/utils) // src

path.extname

获取路径的扩展名。

path.dirname('src/utils/format.js') // .js

// 如果路径是一个目录
path.dirname('src/utils/) // 返回空
             
// 如果带有多个扩展名,只获取最后一个
path.dirname('src/utils/format.cjs.js) // .js      

path.parse

将路径信息转换为一个对象。

path.parse('/root/hello/index.js');

{
  root: '/',
  dir: '/root/hello',
  base: 'index.js',
  ext: '.js',
  name: 'index'
}

可见,它把我们上面通过 basenamedirnameextename 方法获得的结果就解析好了。

path.format

和上一个方法的作用相反,将路径对象转换成路径字符串。

path.format({
  root: '/',
  dir: '/root/hello',
  base: 'index.js',
  ext: '.js',
  name: 'index'
})

'/root/hello/index.js'

path.normalize

将路径格式化为符合当前操作平台的正常的路径。

path.normalize('/a\\b///c/d'); // \a\b\c\d

path.isAbsolute

判断路径是否是绝对路径。返回一个布尔值。

path.isAbsolute('/root');  true

path.isAbsolute('./root'); false

path.sep

获取平台的文件路径分隔符。

path.sep; // win: '\' linux: '/'

path.delimiter

获取平台的分隔符。

path.delimiter) // win: ';' linux: ':'

小结

本篇总结了一些 path 模块的常用方法。其中最常用的就是 path.joinpath.resolve 了。还有一些不常用的,也无需特意去记忆,在用到的时候去查阅官方文档就行了。

目录
相关文章
|
3月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
131 62
|
4月前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
67 1
|
3月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
52 2
|
3月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
36 0
|
3月前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
31 0
|
3月前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
5月前
|
存储 缓存 JSON
Node.js有哪些模块系统
【8月更文挑战第12天】Node.js有哪些模块系统
55 3
|
5月前
[译] Node 模块中的 peer dependencies 是什么?
[译] Node 模块中的 peer dependencies 是什么?
|
6月前
|
存储 JavaScript 安全
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
|
5月前
|
存储 JavaScript 前端开发
nodejs os模块
nodejs os模块
53 0