关于Node.js中的路径问题

时间:2021-11-07 03:43:41

在前端学习过程中,涉及到路径的问题非常多,相对路径,绝对路径等。有时候明明觉得没问题,但是还是会出错。或者说线下没问题,但是到了线上就出现问题,因此弄懂路径问题,非常关键。我们需要知道为什么这个地方既可以使用相对路径,又可以使用绝对路径,为什么有些地方只能使用绝对路径。

一、Node.js中加载模块的路径设置

const myClass = require('./myclass')

上面这段代码是我们在使用Node.js中经常会使用到的代码-引入模块。我们都知道如果加载的是核心模块,直接require(模块名)即可。但是使用本地模块,必须加上路径,这是为什么了?这与模块的查找顺序有关:

node 在查找模块的时候:

  1. 它会先在当前目录的node_modules中查找,是否含有该模块,如果有则直接使用
  2. 如果没有则去上一级目录的node_modules中查找,如果有则使用,如果没有则会一直往上查找,一直到磁盘的根目录,如果还没有则报错

从上面node查找模块的顺序,我们可以知道他会一直在node_modules中查找,但是我们自定义模块都不在node_modules中,因此如果我们想要使用自定义模块,必须加上路径,使得它查找模块直接到我们指定的路径中进行查找。(ps:这是我个人研究的一点看法,可能并不正确,欢迎大家指正。)

二. 关于__dirname和__filename

有些时候,你需要打开一些不在模块系统中的文件来加载数据,但你需要通过当前脚本的路径来找到那个文件。这时候__dirname和__filename变量在这种场景下非常有用。这些变量保存着当前脚本的绝对路径。

__dirname:当前文件的目录的绝对路径,通俗的来说是当前文件的上一级。注意它的路径始终是固定的,与你的光标所在的位置无关(也就是说与你在哪个路径运行node无关)

关于Node.js中的路径问题

如上图所示:index.js文件中console.log(__dirname),最终得到的绝对路径是:

 xxx\Node.js_in_practice\chapter two\group

最终路径到上一级group为止。

__filename:当前文件的绝对路径,包含当前文件的文件名。

关于Node.js中的路径问题

如上图所示:在index.js中的文件路径应该是:

xxx\Node.js_in_practice\chapter two\group\index.js

最终的路径包含文件名。其路径同样与在哪里运行node无关。