目录
Path(路径)
1.系统背景
在说node系统模块Path模块之前,我们先来了解一下路径分隔符在不同的操作系统合编程语言的背景会有什么不同
1、这是在window系统下的文件路径分隔符反斜杠(\)
C:\temp\hello.html
也可以使用正斜杠(/),例如:在命令提示符(Command Prompt)或 PowerShell 中
C:/Users/Username/Documents/example.txt
但是,并非所有的 Windows 应用程序都支持正斜杠路径分隔符,建议大家还是使用反斜杠,因为path.setup只添加反斜杠
2、这是在Unix(Linux)系统下的文件路径分隔符正斜杆(/)
C:/temp/world.html
以上是两种不同系统背景下的路径分隔符,接下来我们来了解编程语言背景下的分隔符使用,在js语言中字符串类型存在一种转义符,而且转义符都是以” \ “开始的,因为这种背景下,所以我们想表示正常的反斜杠就需要一些变动了
js语言中使用” ( \ \ )“,双反斜杠来表示反斜杠
const str='C:\\temp\\file.html'
console.log(str)
//C:\temp\file.html
2、path.basename()
概念: 用于返回一个路径的最后一部分,也就是文件名
语法:
path.basename(path[,ext])
参数:
- path (必选): 要提取文件名的路径字符串。
- ext (可选): 用于指定要排除的文件扩展名。如果指定了这个参数,那么在返回文件名时将不包括指定的文件扩展名。
例子:
console.log(path.basename('C:\\temp\\myfile.html'));
//myfile.html
console.log(path.basename('C:\\pemp\\hello.html','.html'))
//hello
3、path.delimiter
概念: 提供特定平台的路径分隔符
- Windows上是:;
- 类Unix系统上是::
例子
//在Windows系统上
//模拟环境变量中的PATH系统变量的值
const PATH="C:\Windows\system32;C:\Windows;C:\Program Files\node"
console.log(PATH.split(path.delimiter))
//[ 'C:Windowssystem32', 'C:Windows', 'C:Program Files\node' ]
4、path.dirname(path)
概念: 返回一个路径的目录名
参数:
- path:传入的路径,是一个字符串
例子
console.log(path.dirname('/foo/bar/baz/li'))
///foo/bar/baz
5、path.extname(path)
概念: 返回路径的扩展名,即从路径的最后一部分中的最后一个.(句号)字符到字符串结束
❗️ 注意:
- 可能路径的最后一部分没有.(句号),你们就返回空字符串
- 可能路径的第一个字符是 . ,那么也返回空字符串
例子:
console.log(path.extname('index.html'));
//.html
console.log(path.extname('meta.coffee.md'));
//.md
console.log(path.extname('index'));
//''
console.log(path.extname('index.'));
//.
console.log(path.extname('.index'));
//''
6、path.format(pathObject)
概念: 从一个对象返回一个路径字符串,即是将对象转换为路径字符串
参数:
- pathObject
- dir:包含文件的目录的路径
- root:包含路径的根目录路径
- base:包含文件名的部分
- ext:包含文件扩展名的部分
- name:包含文件名但不包含扩展名的部分
当 pathObject 提供的属性有组合时,有些属性的优先级比其他的高:
- 如果提供了 pathObject.dir,则 pathObject.root 会被忽略
- 如果提供了 pathObject.base 存在,则 pathObject.ext 和 pathObject.name 会被忽略
例子:
const path=require('path')
//如果提供dir,root和base,则返回`${dir}${path.sep}${base}`
//root会被忽略
const strPath=path.format({
root:'\ignored',
dir:'\\home\\user\\dir',
base:'file.txt'
})
console.log(strPath);
// \home\user\dir\file.txt
//如果没有提供dir 则root会被使用
//如果只提供了 `root` 或 `dir` 等于 `root`,那么生成的路径字符串中不会包含平台特定的路径分隔符。
//ext会被忽略
const strPath2=path.format({
root:'\\',
base:'file.txt',
ext:'\\ignored'
})
//对于以上的例子来说,如果生成的路径包含分隔符先strPath一样,那么结果
// 就会变成双斜杠,例如://file.txt,
console.log(strPath2)
// \file.txt
//如果没有指定base则 name+ext会被使用
const strPath3=path.format({
root:'\\',
name:'file',
ext:'.txt'
})
console.log(strPath3)
// \file.txt
7、path.isAbsolute(path)
概念: 判定路径path是否为一个绝对路径
如果给定的path是一个长度为零的字符串,则返回false
例子:
path.isAbsolute('C:\\foo\\..'); // true
path.isAbsolute('bar\\baz'); // false
8、path.join([…paths])
概念: 使用平台特定的分隔符把全部给定的path片段连接到一起。并规范化生成的路径
参数:如果任意参数路径不是字符串会报错
例子:
const path=require('path')
const strPath=path.join('/foo','bar','bas/a','ta')
console.log(strPath);
// \foo\bar\bas\a\ta
9、path.normalize(path)
概念: 规范化给定的路径path,并解析 . 和 …
例子:
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'
10、path.parse(path)
概念: 返回一个对象,对象的属性表示路径的path的元素,尾部文件俺分隔符会被忽略,与path.format()方法效果相反
例子:
const str1='C:\\home\\user\\dir\\hello.md'
console.log(path.parse(str1));
/**
一下的对象的属性于path.format参数是一样的
{
root: 'C:\\',
dir: 'C:\\home\\user\\dir',
base: 'hello.md',
ext: '.md',
name: 'hello'
}
**/
11、path.relative(from,to)
概念: 返回从from到to的相对路径(基于当前工作目录)
❗️ 注意:
- 如果from 到 to 各自解析到同一路径(调用path.resolve()),则返回一个长度为零的字符串
- 如果from 到 to传入了一个长度为零的字符串,则当前工作目录会被用于代替长度为零的字符串
例子:
const path=require('path')
console.log(path.relative('C:\\bar\\test\\aa','C:\\bar\\active\\bb'))
//..\..\active\bb
12、path.resolve([…paths])
概念: 把一个路径或者路径片段的序列解析为一个绝对路径
给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo、/bar、baz,则调用 path.resolve(‘/foo’, ‘/bar’, ‘baz’) 会返回 /bar/baz。
❗️ 注意:
- 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上。
- 生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录。
- 长度为零的 path 片段会被忽略。
- 如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。
例子:
console.log(path.resolve('\\foo\\bar','.\\baz'));
// C:\foo\bar\baz
console.log(path.resolve());
//C:\vs\everday\node_practice
console.log(path.resolve('\\foo\\bar','\\temp\\file\\'));
//C:\temp\file
console.log(path.resolve('com','static_file\\png','..\\gif\\image.gif'));
//C:\vs\everday\node_practice\com\static_file\gif\image.gif
13、path.sep()
概念:提供平台特定的路径片段分隔符
Windows上是
类Unix系统上是 /
例子:
console.log('foo\\bar\\baz'.split(path.sep));
//[ 'foo', 'bar', 'baz' ]
在 Windows 上,斜杠字符(/)和反斜杠字符(\)都可作为路径分隔符; 但 path 的方法只添加反斜杠(\)。