如上图所示: server.js
路径为 E:\zyp
; node
命令路径我们可以选择 E:\
或 E:\node
,即:
E:\zpy>node server.jsE:\>node zpy/server.js
后续我们将通过以上两个不同的node命令来运行server.js文件,分别对本文标题所涉及的一些概念进行测试,毕竟计算机是不是说慌的!
我们可以通过引入path内置模块,并使用其resolve()方法将相对路径转换为绝对路径。
server.js:
const path = require("path");console.log(path.resolve("./"));
运行:
E:\zpy>node server.js
结果:
E:\zpy
server.js:
const path = require("path");
console.log("__dirname: "+__dirname);console.log("__filename: "+__filename);console.log("./: "+path.resolve("./"));
E:\zpy
运行命令:
E:\zpy>node server.js
运行结果:
__dirname: E:\zpy__filename: E:\zpy\server.js./: E:\zpy
E:\>
运行命令:
E:\>node zpy/server.js
运行结果:
__dirname: E:\zpy__filename: E:\zpy\server.js./: E:\
小结:
js
所在文件夹的绝对路径
js
的绝对路径
node
命令的绝对路径在server同级创建一个名字为mo.js的文件,该文件内容:
module.exports.siteUrl = "http://www.zhangpeiyue.com";
将server.js内容修改如下:
const mo = require("./mo");console.log(mo.siteUrl);
目前目录结构如下:
E:\zpy>
运行命令:
E:\zpy>node server.js
运行结果:
http://www.zhangpeiyue.com
E:\>
运行命令:
E:\>node zpy/server.js
运行结果:
http://www.zhangpeiyue.com
通过以上命令运行结果,你会惊讶的发现:在两种不同的node命令路径下,request引入地址采用相对地址"./"的情况下,不仅没有发生异常,而且都可以调用到mo.js!
那是因为request中的路径总是相对于包含它的文件,跟你的工作目录是没有半毛钱关系的。
总结:"./"在 require() 中使用与__dirname 的效果相同,不会因为运行脚本的目录不同而发生改变。
使用require() 时可采用相对路径(./, ../) 的写法,其他务必使用绝对路径。例如:
// 与当前文件同目录下的server.js path.dirname(__filename) + '/server.js';
// 当前目录的上一级下的zpy文件中的server.js path.resolve(__dirname, '../zpy/server.js');