浅谈node中的resolve

前言

今天学习node时候对于path.resolve()各种情况不太了解,只知道是拼接路径,但是具体规则不清楚,于是写这篇小文章记载一下。

path.resolve([...paths])

新增于: v0.3.4

  • ...paths <string> 路径或路径片段的序列。
  • 返回: <string>
    path.resolve() 方法将路径或路径片段的序列解析为绝对路径。
    给定的路径序列从右到左进行处理,每个后续的 path 前置,直到构造出一个绝对路径。 例如,给定的路径片段序列:/foo/barbaz,调用 path.resolve('/foo', '/bar', 'baz') 将返回 /bar/baz

我们可以分三种情况去总结\color{red}{resolve}

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
``
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容