浅谈node中的resolve
2020-02-26 本文已影响0人
景元合
前言
今天学习node时候对于path.resolve()各种情况不太了解,只知道是拼接路径,但是具体规则不清楚,于是写这篇小文章记载一下。
path.resolve([...paths])
新增于: v0.3.4
-
...paths
<string> 路径或路径片段的序列。 - 返回: <string>
path.resolve()
方法将路径或路径片段的序列解析为绝对路径。
给定的路径序列从右到左进行处理,每个后续的path
前置,直到构造出一个绝对路径。 例如,给定的路径片段序列:/foo
、/bar
、baz
,调用path.resolve('/foo', '/bar', 'baz')
将返回/bar/baz
。
我们可以分三种情况去总结
1.传入的参数不带/或者为./
- 此时所有参数都会被拼接到当前目录的后面
const {resolve}=require('path');
;(async ()=>{
console.log(resolve(__dirname));
console.log(resolve('./a'));
console.log(resolve(__dirname,'./a'));
console.log(resolve(__dirname,'./a','./b'))
})()
//F:\学习\douban-koa\server\tasks
//F:\学习\douban-koa\a
//F:\学习\douban-koa\server\tasks\a
//F:\学习\douban-koa\server\tasks\a\b
2.传入的参数带../
- 分2种情况:
- 参数前面没有参数,则去路径的最后一节路径
- 参数前面有参数,则前面的参数不会被拼接到路径中
const {resolve}=require('path');
;(async ()=>{
console.log(resolve('../a'));
console.log(resolve(__dirname,'../a'));
console.log(resolve(__dirname,'./a','../c','../b'))
})()
//F:\学习\a
//F:\学习\douban-koa\server\a
//F:\学习\douban-koa\server\tasks\b
3.传入的参数带/
以最后一个出现的带/参数为起始位置,不接受当前路径前的任何参数,包括文件所在路径:
const {resolve}=require('path');
;(async ()=>{
console.log('/a')
console.log(__dirname,'/a')
console.log(resolve('./a', '/b', '/c'));
console.log(resolve('./a', '/b', '/c', './d'));
console.log(resolve('./a', '/b', '/c', './d', '../f'))
})()
///a
//F:\学习\douban-koa\server\tasks /a
//F:\c
//F:\c\d
//F:\c\f
``