本文介绍下node中的其他成员,非模块成员,dirname和filename,结合之前案例所用的
由简单的Express案例可以看出__dirname用法与path等类似,都是在node里使用,但它是非模块成员.
测试如下,新建文件做个简单测试:
注意:动态绝对路径→两个模块是动态获取路径的,后期如果文件位置改变,则获取结果也会改变
(1)相对于路径指的是相对于启动文件Index.js的相对路径
即
接下来换到其他目录启动文件
之前启动项目,都是跑到对应启动入口文件目录下执行,这里改为跑到其他目录通过node+路径执行
测试如下:发现无法获取a.txt文件,原因:此时的./是相对于执行node命令所属的终端路径
小结 如下:
(2)其他情况
1、先回顾下之前的操作,首先在项目入口文件所在终端路径进行正常读取
2、接下来在其他终端路径读取(例如父级路径)
发现读取失败,一般情况下也不会这么操作。但凡是有例外,接下来看下其他情况
3、接下来再对上述文件做下修改,新建文件
这里通过demo.js去启动项目,将demo.js作为入口文件启动项目
此时并不是直接执行入口文件index.js,而是通过其他文件执行
但分析后得知,这里依然存在问题,分析:文件操作模块里的./并不是传统简单的相对路径,而是相对于当前入口文件的终端路径
因此总结如下:
接下来做下修改,将a.txt的路径改为绝对路径,如下所示
接下来Ctrl+D选中所有反斜杠改为/
至此在做下读写测试,便可以随意读取操作
(3)问题分析(动态绝对路径)
此时虽然可以在其他目录启动文件进行读取操作,但任然存在问题
团队协同开发时,他人的项目存放目录不一致,无法统一,也就不能执行,不能保证项目目录一致性。所以这里便用到了path核心模块和__dirname非模块成员
或者
此时便可以不受目录限制,正常读取
除了__dirname还有filename
或者
注意:这里是逗号,分隔
注意:模块中的路径标识和这里的动态绝对路径无关,即模块标识里的相对路径不受影响
这里的./b不管如何都可以读取到当前相对路径的b.js文件,不受影响
.