前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >知识点归纳笔记:关于Node.js中__dirname、__filename以及./的一些小坑总结

知识点归纳笔记:关于Node.js中__dirname、__filename以及./的一些小坑总结

作者头像
用户1272076
发布2019-04-23 14:11:27
1.2K0
发布2019-04-23 14:11:27
举报
文章被收录于专栏:张培跃
1、node命令路径与js文件路径
node命令路径为node命令所执行的目录,js文件路径指的是你要运行的js所在的目录。

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

代码语言:javascript
复制
E:\zpy>node server.jsE:\>node zpy/server.js

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

2、相对地址转绝对地址

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

server.js:

代码语言:javascript
复制
const path = require("path");console.log(path.resolve("./"));

运行:

代码语言:javascript
复制
E:\zpy>node server.js

结果:

代码语言:javascript
复制
E:\zpy
3、比较dirname、filename以及./

server.js:

代码语言:javascript
复制
const path = require("path");
console.log("__dirname: "+__dirname);console.log("__filename: "+__filename);console.log("./: "+path.resolve("./"));

E:\zpy运行命令:

代码语言:javascript
复制
E:\zpy>node server.js

运行结果:

代码语言:javascript
复制
__dirname: E:\zpy__filename: E:\zpy\server.js./: E:\zpy

E:\>运行命令:

代码语言:javascript
复制
E:\>node zpy/server.js

运行结果:

代码语言:javascript
复制
__dirname: E:\zpy__filename: E:\zpy\server.js./: E:\

小结:

  • __dirname: 返回 js所在文件夹的绝对路径
  • __filename: 返回被执行的 js 的绝对路径
  • ./: 返回执行 node 命令的绝对路径
4、再来看一个问题:

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

代码语言:javascript
复制
module.exports.siteUrl = "http://www.zhangpeiyue.com";

将server.js内容修改如下:

代码语言:javascript
复制
const mo = require("./mo");console.log(mo.siteUrl);

目前目录结构如下:


E:\zpy>运行命令:

代码语言:javascript
复制
E:\zpy>node server.js

运行结果:

代码语言:javascript
复制
http://www.zhangpeiyue.com

E:\>运行命令:

代码语言:javascript
复制
E:\>node zpy/server.js

运行结果:

代码语言:javascript
复制
http://www.zhangpeiyue.com

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

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

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

5、建议

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

代码语言:javascript
复制
// 与当前文件同目录下的server.js path.dirname(__filename) + '/server.js'; 
// 当前目录的上一级下的zpy文件中的server.js path.resolve(__dirname, '../zpy/server.js');
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、node命令路径与js文件路径
  • node命令路径为node命令所执行的目录,js文件路径指的是你要运行的js所在的目录。
  • 2、相对地址转绝对地址
  • 3、比较dirname、filename以及./
  • 4、再来看一个问题:
  • 5、建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档