作用:返回 path 的最后一部分
(获取路径最后一部内容),一般用它来获取文件名称
说明:path.basename(path[, suffix])
【注意】:如果 path 不是字符串,或者如果给定 suffix 并且不是字符串,则抛出 TypeError
用法:
path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux' 拷贝
尽管 Windows 通常以不区分大小写的方式处理文件名(包括文件扩展名),但此函数不会。 例如,C:\foo.html 和 C:\foo.HTML 指的是同一个文件,但 basename 将扩展名视为区分大小写的字符串:
path.win32.basename('C:\\foo.html', '.html');
// Returns: 'foo'
path.win32.basename('C:\\foo.HTML', '.html');
// Returns: 'foo.HTML'
作用:方法返回 path 的目录名
,类似于 __dirname
命令。路径最后分隔符部分被忽略
【注意】:如果 path 不是字符串,则抛出 TypeError。
path.dirname('c:/a/b/c/d.html')
//return : 'c:/a/b/c'
已知当前文件路径 '/Users/cpf/Desktop/demo/node/01hello.js'
path.dirname(__filename)
//return: '/Users/cpf/Desktop/demo/node'
path.dirname(__dirname)
//return: '/Users/cpf/Desktop/demo'
作用:返回 path 的扩展名
(获取路径中文件扩展名(后缀)),即 path 的最后一部分
中从最后一次出现的 .(句点)
字符到字符串的结尾。
【注意】:如果 path 的最后一部分中没有 .,或者除了 path 的基本名称(参见 path.basename())的第一个字符之外没有 . 个字符,则返回空字符串
【注意】:如果 path 不是字符串,则抛出 TypeError。
path.extname('index.html');
// Returns: '.html'
path.extname('index.coffee.md');
// Returns: '.md'
path.extname('index.');
// Returns: '.'
path.extname('index');
// Returns: ''
path.extname('.index');
// Returns: ''
path.extname('.index.md');
// Returns: '.md'
作用:path.join()该方法是用分隔符
将所有给定的 path 片段连接
在一起,然后规范化生成的路径。
说明:path.join([path1][, path2][, …])
【注意】:如果任何参数不是字符串,则抛出 TypeError。
用法:
无或空
时,得到的结果是" . "
,只有传入__dirname的时候,才能得到绝对路径// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.join());
console.log(path.join(''));
console.log(path.join(__dirname));
// 输出:.
// 输出:.
// 输出:E:\Berlin-Case\path
./
或/
或 没有字符,则正常拼接前面路径加不加./
或/
都不影响路径的拼接,跟path.resolve()不同;
因为path.join()只会单纯的去拼接你写入的"path"路径,而不会像path.resolve()那样用cd去运作;
// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.join());
console.log(path.join('a'));
console.log(path.join('a','b'));
console.log(path.join('c','b','a'));
console.log(path.join('./a'));
console.log(path.join('a','./b'));
console.log(path.join('./c','b','./a'));
console.log(path.join('/a'));
console.log(path.join('a','/b'));
console.log(path.join('/c','b','/a'));
// 输出:.
// 输出:a
// 输出:a\b
// 输出:c\b\a
// 输出:a
// 输出:a\b
// 输出:c\b\a
// 输出:\a
// 输出:a\b
// 输出:\c\b\a
../
开头,从右到左去拼接的来覆盖掉;// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.join());
console.log(path.join('../'));
console.log(path.join('../a'));
console.log(path.join('../a','b'));
console.log(path.join('a','../b'));
console.log(path.join('c','b','../a'));
console.log(path.join('../c','b','a'));
// 输出:.
// 输出:..\
// 输出:..\a
// 输出:..\a\b
// 输出:b
// 输出:c\a
// 输出:..\c\b\a
path.join()和__dirname一起使用
// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.join(__dirname,'/a'));
console.log(path.join(__dirname,'./a'));
console.log(path.join(__dirname,'../'));
console.log(path.join(__dirname,'../a'));
console.log(path.join(__dirname,'../a','b'));
// 输出:E:\Berlin-Case\path\a
// 输出:E:\Berlin-Case\path\a
// 输出:E:\Berlin-Case\
// 输出:E:\Berlin-Case\a
// 输出:E:\Berlin-Case\a\b
以上示例可以看出,‘/’ ‘./’ 这两个字符在path.join()的方法中是不起作用的,不加也是一样的效果,只有 '…/ ’ 才有返回上级目录的作用,所以使用path.join()时,加个__dirname,拼上你要的"path"路径即可;
作用:path.resolve() 该方法将一些的 路径/路径段
解析为 绝对路径
。
path.resolve总是返回一个以相对于当前的工作目录(working directory)的绝对路径。
给定的路径序列从右到左处理,每个后续的 path 会被追加到前面,直到构建绝对路径,
相当于:每一个参数都理解为一个cd命令。最终cd到哪个路径。返回该绝对路径。
语法:path.resolve( [from…],to )
说明:将参数to位置的字符解析到一个绝对路径里,[from … ]为选填项,路径源;
【注意】:如果任何参数不是字符串,则抛出 TypeError。
用法:
/
开头,不会拼接到前面的路径:path.resolve('/foo/bar', '/baz')
结果: '/baz'
因为 '/baz' 已经是一个绝对路径,故不会再向前拼接.
// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.resolve());
console.log(path.resolve('/a'));
console.log(path.resolve('/a','b','c'));
console.log(path.resolve('a','/b','c'));
console.log(path.resolve('c','b','/a'));
// 输出:E:\Berlin-Case\path
// 输出:E:\a
// 输出:E:\a\b\c
// 输出:E:\b\c
// 输出:E:\a
./
开头 或者没有符号
,则正常拼接前面路径:path.resolve('/foo/bar', './baz')
结果:'/foo/bar/baz'
// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.resolve());
console.log(path.resolve('a'));
console.log(path.resolve('a','b'));
console.log(path.resolve('c','b','a'));
console.log(path.resolve('./a'));
console.log(path.resolve('a','./b'));
console.log(path.resolve('./c','b','./a'));
// 输出:E:\Berlin-Case\path
// 输出:E:\Berlin-Case\path\a
// 输出:E:\Berlin-Case\path\a\b
// 输出:E:\Berlin-Case\path\c\b\a
// 输出:E:\Berlin-Case\path\a
// 输出:E:\Berlin-Case\path\a\b
// 输出:E:\Berlin-Case\path\c\b\a
../
开头,拼接前面的路径,不含最后一节路径:path.resolve('/foo/bar', '../baz')
结果: '/foo/baz'
拼接前面路径 '/foo/bar' ,但是不包含前面路径最后 '/bar' 这部分
没有传入 path
片段,则 path.resolve() 将返回当前工作目录的绝对路径
,类似于__dirname
//假设该文件的路径问为 /Users/kk/Desktop/my/node_koa/abc.js
const path = require('path');
let res = path.resolve();
console.log(res)
结果:/Users/kk/Desktop/my/node_koa
/Users/kk/Desktop/my/node_koa 为该文件的根目录
// 此处直接打印
console.log(path.resolve());
console.log(path.resolve(''));
console.log(path.resolve(__dirname);
// 输出:E:\Berlin-Case\path
// 输出:E:\Berlin-Case\path
// 输出:E:\Berlin-Case\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/itbilu/node,则输出结果为
'/home/itbilu/node/wwwroot/static_files/gif/image.gif'
path.resolve()搭配__dirname一起使用
// 引入path模块
const path = require('path');
// 此处直接打印
console.log(path.resolve(__dirname,'a'));
console.log(path.resolve('a','b',__dirname));
console.log(path.resolve(__dirname,'./a','b'));
console.log(path.resolve(__dirname,'/a','b'));
console.log(path.resolve(__dirname,'../a','b'));
console.log(path.resolve(__dirname,'a','../b'));
console.log(path.resolve('a','/b',__dirname));
// 输出:E:\Berlin-Case\path\a
// 输出:E:\Berlin-Case\path
// 输出:E:\Berlin-Case\path\a\b
// 输出:E:\a\b
// 输出:E:\Berlin-Case\a\b
// 输出:E:\Berlin-Case\path\b
// 输出:E:\Berlin-Case\path
从案例五例子可以看出,__dirname变量需放在第一个,否则会覆盖在它之前的’path’路径,包括斜杠’ / ‘,还有个要注意的点,__dirname之后也不能出现’ / ',不然也覆盖之前的路径;
【参考文章】