node中的路径 path __dirname path.resolve path.join

2020-08-15 20:56发布

__dirname与./的区别

Node.js中,__dirname总是指向被执行js文件的绝对路径,所以当你在/d1/d2/myScript.js文件中写了__dirname,它的值就是/d1/d2

./会返回你执行node命令的路径,

比如你在目录D盘下执行d1/d2/myScript.js

__dirname是d:/d1/d2

./指的是d:/

有一个特殊情况在require()中使用./时,这时的路径就会是含有require()的脚本文件的相对路径

例如:

假如有如下目录结构:

/dir1

  /dir2

   /pathtest.js

pathtest.js

const path=require('path');
console.log('.= %s',path.resolve('__dirname'));
console.log('__dirname= %s',path.resolve('.'));

然后执行下面的代码:

cd /dir1/dir2

node pathtest.js

结果:

. = /dir1/dir2
__dirname = /dir1/dir2

 

如果我们的工作目录是dir1

cd /dir1

node dir2/pathtest.js

结果:

. = /dir1
__dirname = /dir1/dir2

此时,.指向我们的工作目录,即/dir1,__dirname还是指向/dir1/dir2

在require中使用.

如果在dir2/pathtest.js中调用了require方法,去引入位于dir1目录的js文件,你需要写成

require('../pathtest.js')

因为require中的路径总是相对于包含它的文件,跟你的工作目录没有关系。

path.resolve([...paths])

传入参数:.../paths是传入的字符串参数,是路径序列或者路径片段

返回值:字符串

使用方法:

1 path.resolve()方法可以将路径或者路径片段解析成绝对路径

2 传入的路径从右至左解析,遇到第一个绝对路径是完成解析,例如:path.resolve(‘/foo’,‘/bar’,‘baz’),将返回:/bar/baz

3 如果传入的绝对路径不存在,那么当前目录将被使用

4 当传入的参数没有/时,将被传入解析到当前根目录

5 零长度的路径将被忽略

6 如果没有传入参数,将返回当前根目录

事例代码:
path.resolve('/foo/bar', './baz')
// Returns: '/foo/bar/baz'
 

path.resolve('/foo/bar', '/tmp/file/')
// Returns: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// if the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'

1 传入的路径从右向左解析,遇到第一个绝对路径时完成解析

2 ‘../’方法向前跳了一个目录

path.resolve()是一个修改和整合文件路径的方法

__dirname

运行下面的代码:

执行结果:

 

 

 

结果分析:
1.只传入__dirname也可以自动调用path.resolve方法
2.可以拼接路径字符串,但是不调用path.resolve()方法拼接失败
3.__dirname代表的是当前文件(a.js)的绝对路径
4.从右至左解析,遇到了绝对路径/src,因此直接返回












 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考:https://blog.csdn.net/zsensei/article/details/79094714

https://www.jianshu.com/p/76966243f27f

 

标签: