Skip to content

path.join与path.resolve对比

一. path模块

path模块是nodejs里面的核心内置模块,用于处理路径的,使用的时候需要require引入。

js
const path = require('path')

path下面的方法有很多,例如:

  1. path.basename:取到最后一部分path,可传入第二个参数
js
const path = require('path')
let p = '/a/s/d/f/g.html'

console.log(path.basename(p,'.html')); // g
console.log(path.basename(p,'html')); // g.
console.log(path.basename(p,'.HTML')); // g.html
console.log(path.basename(p)); // g.html
  1. path.dirname:可取到文件所在的目录名称
js
const path = require('path')
let p = '/a/s/d/f/g.html'

console.log(path.dirname(p)); // /a/s/d/f
  1. path.extname:可得到路径中最后一级的文件的扩展名,包含点,
js
const path = require('path')
let p = '/a/s/d/f/g.html'

console.log(path.extname(p)); // .html
  1. path.parse:解析路径得到路径全信息
js
const path = require('path')
let p = '/a/s/d/f/g.html'

console.log(path.parse(p)); // { root: '/', dir: '/a/s/d/f', base: 'g.html', ext: '.html', name: 'g' }
  1. path.join:用于拼接路径
  2. path.resolve:用于将一系列路径或路径段解析为绝对路径

其中最常用的还是path.resolvepath.join,他们都能得到绝对路径,但是也有区别,下面来做一简单的对比

二. path.resolve

path.resolve的作用:你给我一个相对路径,我还你一个绝对路径。

js
const path = require('path');
console.log(path.resolve('latest.txt')); // e:\2022\learn\latest.txt

要点

  1. resolve解析路径,默认是以process.cwd()来解析的(当前工作目录),不一定是被执行的js文件所在目录,因此,可能会出问题。
  2. resolve也有拼接的功能
  3. 在resolve的路径中,若是遇到/\\开头的路径,它会认为是跟路径,则前面的路径都将失效,会以带/或'\'开头的这个路径为起点向后拼接路径(与join最大的区别)
js
const path = require('path');
console.log(path.resolve('latest.txt')); // e:\2022\learn\latest.txt
console.log(path.resolve(__dirname,'latest.txt')); // e:\2022\learn\latest.txt
console.log(path.resolve(__dirname,'abc','latest.txt')); // e:\2022\learn\abc\latest.txt
console.log(path.resolve('./abc','/def','latest.txt')); // e:\def\latest.txt
console.log(path.resolve('./abc','\\def','latest.txt')); // e:\def\latest.txt
console.log(path.resolve('./abc','/','../','latest.txt')); // e:\latest.txt

三. path.join

path.join的作用只是简单路径的拼接,不会自动产生绝对路径,在不同系统内,可以得到系统支持的路径

js
const path = require('path');
console.log(path.join('latest.txt')); // latest.txt
console.log(path.join(__dirname,'latest.txt')); // e:\2022\learn\latest.txt
console.log(path.join(__dirname,'abc','latest.txt')); // e:\2022\learn\abc\latest.txt
console.log(path.join('./abc','\\def','latest.txt')); // abc\def\latest.txt
console.log(path.join('./abc','\\def','../','latest.txt')); // abc\latest.txt