[node.js]关于Node.js中__dirname、__filename以及./的一些总结

1、node命令路径与js文件路径

node命令路径为node命令所执行的目录,js文件路径指的是你要运行的js所在的目录。

如上图所示: server.js路径为E:\user; node命令路径我们可以选择 E:\或 E:\node,即:

E:\user>node server.js
E:\>node zpy/server.js

后续我们将通过以上两个不同的node命令来运行server.js文件,分别对本文标题所涉及的一些概念进行测试,毕竟计算机是不是说慌的!

2、相对地址转绝对地址

我们可以通过引入path内置模块,并使用其resolve()方法将相对路径转换为绝对路径。
server.js

const path = require("path");
console.log(path.resolve("./"));

运行:
E:\user>node server.js
结果:

E:\user
E:\

3、比较__dirname、__filename以及./

server.js内容:

const path = require("path");

console.log("__dirname: "+__dirname);
console.log("__filename: "+__filename);
console.log("./: "+path.resolve("./"));

E:\user>运行命令:

E:\user>node server.js

运行结果:

__dirname: E:\uesr
__filename: E:\uesr\server.js
./: E:\uesr

E:\>运行命令:

E:\>node uesr/server.js

运行结果:

__dirname: E:\uesr
__filename: E:\uesr\server.js
./: E:\

小结:

  • __dirname: 返回js所在文件夹的绝对路径
  • __filename: 返回被执行的 js 的绝对路径
  • ./: 返回执行 node 命令的绝对路径

4、再来看一个问题:

server同级创建一个名字为demo.js的文件,该文件内容:

module.exports.siteUrl = "http://www.baidu.com";

server.js内容修改如下:

const demo = require("./demo");
console.log(demo.siteUrl);

目前目录结构如下:

E:\uesr>运行命令:

E:\uesr>node server.js

运行结果:

http://www.baidu.com

E:\>运行命令:

E:\>node uesr/server.js

运行结果:

http://www.baidu.com

通过以上命令运行结果,你会惊讶的发现:在两种不同的node命令路径下,request引入地址采用相对地址"./"的情况下,不仅没有发生异常,而且都可以调用到p.js!

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

总结:"./"在 require() 中使用与__dirname 的效果相同,不会因为运行脚本的目录不同而发生改变。

5、建议

**使用require() 时可采用相对路径(./, …/) 的写法,其他务必使用绝对路径。**例如:

// 与当前文件同目录下的server.js
 path.dirname(__filename) + '/server.js'; 

// 当前目录的上一级下的zpy文件中的server.js
 path.resolve(__dirname, '../user/server.js');

猜你喜欢

转载自blog.csdn.net/u013034585/article/details/105609198
今日推荐