require的工作原理: 1.看该模块是不是node内置的模块 2.看该模块是不是在node-modules中 3.如果是相对路径,是以当前所编辑文件所在的位置为基准,去require该模块。 4.一般不用绝对路径,因为我们没办法知道服务器的绝对路径。
fs读取文件时,路径是根据pwd路径来的,相当于在控制台执行node时的路径,并不是根据写fs的文件本身去定位的。
上图可以看出,在test.js中执行的fs寻找./index.js文件,我们以为是以当前文件为基准找当前同一个文件夹下面的index文件,但是它却找的是根目录下的index文件。
原理就是运行当前文件时,此时的文件目录是在根目录下。
解决方案:使用fs时,若想以当前文件为路径基准,就可以加上path.join(__dirName, 相对于当前文件的路径),即可。就可以以当前文件为基准,找到绝对路径下的文件。