浅谈node中的resolve

前沿

  • 很多时候,不管是webpack配置,还是在node中,我们都能看到path.resolve方法,我们都知道它是用来拼接路径的方法,但是它更多的用法,常常被我们忽略掉,今天稍微做一个小小的总结;

resolve

  • node官网上的说法

    • path.resolve() 方法将路径或路径片段的序列解析为绝对路径。
    • 给定的路径序列从右到左进行处理,每个后续的 path 前置,直到构造出一个绝对路径。 例如,给定的路径片段序列:/foo、 /bar、 baz,调用 path.resolve(’/foo’, ‘/bar’, ‘baz’) 将返回 /bar/baz。
  • 但是笔者看了半天,确实没太明白官网上表达的意思,于是自己做了点小小的总结;

我们可以分三种情况去看待resolve

第一种,传入的参数不带/或者为./

  • 此时,所有的参数都会被拼接到当前文件所在位置后面
const path = require('path')

const pathStr = path.resolve('./a', './b')

console.log(pathStr) // C:\Users\40368\Desktop\minf-t\test\a\b

第二种,传入的参数带../

  • 拼接前面的路径,且不含最后一节路径;为方便理解,将不含最后一节路径分为两种情况
    • 当前参数前面没有参数,则去掉路径的最后一节路径;
    • 当前参数前面有参数,则它前面的那个参数不拼接到路径中;
const path = require('path')

const pathStr1 = path.resolve('./a', './b', '../c') // C:\Users\40368\Desktop\minf-t\test\a\c

第三种,传入的参数带/

  • 不管参数如何传递,当参数中包含/,我们总是以最后出现的最后一个带/参数为起始位置,且不拼接到文件之前的任何参数,包括文件所在位置;
const path = require('path')

const pathStr1 = path.resolve('./a', '/b', '/c') // /c
const pathStr1 = path.resolve('./a', '/b', '/c', './d') // /c/d
const pathStr1 = path.resolve('./a', '/b', '/c', './d', '../f') // /c/f

你可能感兴趣的:(node,JavaScript,resolve)