Node.js入门:path 模块学习

前言

上文讲解了 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 了。还有一些不常用的,也无需特意去记忆,在用到的时候去查阅官方文档就行了。

猜你喜欢

转载自blog.csdn.net/Old_Soldier/article/details/128859838