天天看点

nodejs 当前文件路径_Nodejs文件路径处理API:path

path简介

path是一个和路径有关的模块,用于处理文件路径和目录路径,可以通过如下方式引入使用:

const path = require('path')

下面将重点介绍一些path常用的方法:

normalize join resolve

basename extname dirname

parse format

sep delimiter win32 posix

path 模块的默认操作因 Node.js 应用程序运行所在的操作系统而异。 在Windows和POSIX上运行会得到不同风格的输出结果。

normalize

识别出我们所写的路径不规范的地方,然后将该路径标准规范化:

const { normalize } = require('path')

console.log(normalize('C:\\Windows\\debug'))

//打印:C:\Windows\debug

console.log(normalize('/usr//local/bin'))

//打印:\usr\local\bin

console.log(normalize('/usr//local/./bin'))

//打印:\usr\local\bin

console.log(normalize('/usr//local/../bin'))

//打印:\usr\bin

normalize会将我们传入的 "\\" 和 "//"替换为规范的 “/”,还会解析 ".."和 "." 片段:"."表示当前工作目录,".." 表示上一级目录。

因为我使用的操作系统是Windows,Windows 识别多种路径分隔符,因此这些分隔符都将被替换为 Windows 首选的分隔符 "/",在其他支持POSIX的OS(如UNIX、Linux(基本兼容,但并未参加正式认证))则依然打印 “\” 。

join

拼接一个路径,同时会调用normalize来去对一些不规范的路径进行处理:

const { join } = require('path')

console.log(join('/usr', 'local', 'bin/'))

//打印:\usr\local\bin\

console.log(join('/usr/', '/local/', '/bin/'))

//打印:\usr\local\bin\

console.log(join('/usr', '../local', 'bin/'))

//打印:\local\bin\

如果拼接的是零长度的字符串,则返回 '.',表示当前工作目录。

resolve

将相对路径解析为绝对路径:

const { resolve } = require('path')

console.log(resolve('./'))

//打印:当前项目所在目录的绝对路径

basename, dirname, extname

basename:返回 path 的最后一部分的文件名

dirname:返回 path 的目录名

extname:返回 path 的扩展名

const { basename, dirname, extname } = require('path')

const filePath = '/usr/local/bin/app.js'

console.log(basename(filePath))

//打印:app.js

console.log(dirname(filePath))

//打印:/usr/local/bin

console.log(extname(filePath))

//打印:.js

parse, format

parse:打印一个对象,其属性表示 path 的重要元素

const { parse } = require('path')

const posixPath = '/home/user/dir/file.txt' //POSIX风格

const windowsPath = 'C:\\path\\dir\\file.txt' //windows风格

console.log(parse(posixPath))

// 打印:

// { root: '/',

// dir: '/home/user/dir',

// base: 'file.txt',

// ext: '.txt',

// name: 'file' }

console.log(parse(windowsPath))

// 打印:

// {

// root: 'C:\\',

// dir: 'C:\\path\\dir',

// base: 'file.txt',

// ext: '.txt',

// name: 'file'

// }

format:从对象打印路径字符串, 与 path.parse() 相反。

const { format } = require('path')

const filePath = {

root: '/',

dir: '/home/user/dir',

base: 'file.txt',

ext: '.txt',

name: 'file'

}

console.log(format(filePath))

// 打印:/home/user/dir/file.txt

此外,当为 pathObject 提供属性时,以下组合中有些属性优先级会更高会更高:

1.如果提供了 pathObject.dir,则忽略 pathObject.root

2.如果 pathObject.base 存在,则忽略 pathObject.ext 和 pathObject.name。

const { format } = require('path')

// 如果提供了 `dir`、 `root` 和 `base`,

// 则返回 `${dir}${path.sep}${base}`。

// `root` 会被忽略。

const filePath = {

root: '/ignored',

dir: '/home/user/dir',

base: 'file.txt'

}

console.log(format(filePath))

// 打印: '/home/user/dir/file.txt'

// 如果未指定 `dir`,则使用 `root`。

// 如果只提供 `root`,或 'dir` 等于 `root`,则将不包括平台分隔符。

// `ext` 将被忽略。

const filePath2 = {

root: '/',

base: 'file.txt',

ext: 'ignored'

}

console.log(format(filePath2))

// 打印: '/file.txt'

// 如果未指定 `base`,则使用 `name` + `ext`。

const filePath3 = {

root: '/',

name: 'file',

ext: '.txt'

}

console.log(format(filePath3))

// 打印: '/file.txt'

sep, delimiter, win32, posix

sep:提供平台特定的路径片段分隔符

const { sep } = require('path')

console.log(sep)

// Windows打印:\

// POSIX打印:/

delimiter:提供平台特定的路径定界符

const { delimiter } = require('path')

console.log(process.env.PATH)

// Windows打印:'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

// POSIX打印:'/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

console.log(delimiter)

// Windows打印:;

// POSIX打印::

win32:提供对特定于 Windows 的 path 方法的实现的访问

const {

sep,

delimiter,

win32//在POSIX中引入该属性,就可以查看Windows下的输出风格

} = require('path')

console.log(win32.sep)

//打印:\

console.log(win32.delimiter);

//打印:;

posix:提供对 path 方法的 POSIX 特定实现的访问。

const {

sep,

delimiter,

posix//在Windows中引入该属性,就可以查看POSIX下的输出风格

} = require('path')

console.log(posix.sep)

//打印:/

console.log(posix.delimiter);

//打印::

补充:

__dirname,__filename总是返回文件的绝对路径;

process.cwd() 则是返回执行 node 命令所在的文件夹的路径;

'./' 在require方法中总是相对当前文件所在的文件夹,在其他地方和process.cwd() 一样,相对node启动文件夹。