在 /js 目录下执行 node foo/index.js ,会出现文件找不到的情况,原因: /js/foo/index.js 文件中读文件是写的相对路径也即: ./a.txt ,而这个相对路径实际上是相对于执行 node 命令所处的路径,也即以上的执行node时,进行文件 *** 作时查找的路径是: js/a.txt 显然 /js 目录下没有该文件,也就查找失败。
再看一种场景
在 /js 目录下执行 node other.js 命令,执行结果为:
原因和之前的一样,虽然在 js 下执行该命令,但是在该文件中还是在引入并执行 index.js 文件,由于 node 命令执行的目录是: /js 目录,所以在文件 *** 作的时候,查找的文件目录是: /js/a.txt ,显然又是找不到的结果
所以在文件 *** 作中,相对路径是不可靠的,为了解决这个问题,则需要将相对路径改为绝对路径。但是如果仅仅是将文件 *** 作的路径改为 C:\node\js\foo\a.txt 路径,则当交付项目的时候,还需要将该路径改为当前项目所处计算机的绝对路径,显然这是不可行的,因此 __dirname 开始发挥作用。
而什么 __dirname 是什么呢?
在每个模块中,除了 require 、 exports 等模块相关API之外,还有两个特殊的成员
由于 __dirname 不受node命令所属路径影响,同时又可以动态的获取当前文件的绝对路径,因此可以是个不错的选择,将 /foo/index.js 修改:
模块中 require 中所写的路径跟文件 *** 作的路径是没有关系的,其路径是相对于文件模块的,也即相对于当前文件模块(文件)所处目录的相对路径。
此时查找 ./foo/index.js 就是相对于 /js 目录
比如,你要去学校,要先出门,然后左转,经过某个地方,右转,往前走100米等等,就到了学校。再比如,你要去超市,你同样得出门,然后往前走到一个十字路口,然后过马路,往右经过一个面包店等等等等,然后到达了超市。好了,说这些有什么关系呢?同样的,你要执行某个软件,你得先找到这个软件,找不到软件会发生什么情况呢?
如下图:
这就相当于你想去学校或者超市,但是你却忘记了你该怎么走。执行软件的时候却找不到软件,所以就报错了。
那么如何让我们每次都能记起来去学校、超市,或者其他等等地方的路线呢?没错,写到本子上、记在手机的记事本里。同样,要使每次报错不能运行的软件能够正常运行,我们也可以把软件的运行路径记录到 *** 作系统的(PATH)变量里。那么,这个叫做(PATH)的东西,该去哪里修改,让它记住我们程序的路径呢?
首先,先找到我们的程序在哪,比如nodejs,我放在了这:
那么我们需要的是哪一个路径呢?node.exe所在的目录,也就是:D:\softs\node-v10.14.2-win-x64 这个路径。为什么不是D:\softs\node-v10.14.2-win-x64/node.exe呢?先不说可行不可行,单只从合理性上来说,如果你有100个执行软件,都添加到(PATH)里,那么你的(PATH)都会被你写成一篇论文那么长的字符串。每次从论文里面修改东西,先不说计算机不知道累不累,但我们人本身,肯定是累得够呛,这完全是反人类的设计。所以,记住,需要添加到(PATH)的是执行文件所在的目录,而不是执行文件本身。
好了,得到node所在的这个目录之后,我们先来测试一下,怎么测试呢?先用cd(change directory 改变目录)这个命令,切换到我们node.exe可执行文件所在的目录。
看到没,切换到node本身所在的目录再执行node -v命令,版本号就出现了。所以,这就更加确定了,node执行不了,不是node本身不能运行或不存在,而是系统找不到它。有人可能会问,这个软件就在我的计算机上的, *** 作系统怎么找不到?这里我们用屁股来想一想, *** 作系统本身的文件加上你平时使用软件和软件本身产生的文件,少说也有几十万。那么每次 *** 作系统执行文件,总不能每次从这几十万文件里面去找node在哪吧?虽然电脑速度快,但是完全不需要搞得这么傻逼对不对。所以,把需要执行的软件所在的目录,放到(PATH)里面。这样,每次执行命令,就去(PATH)记录的目录里面去找,这样是不是快得一笔?
好了, node所在的目录路径找到了,现在放到(PATH)里面去,我用的是windows7系统,其他系统请参考。
1,打开计算机的属性面板,至于怎么打开?方法比较多,右击桌面上的【电脑】图标,选择属性。或者点击左下角【开始】菜单,右击【计算机】,选择【属性】也行。
2,打开属性面板之后,再点击【高级系统设置】
3,d出一个框,选择【环境变量】
4,然后,我们就看到了,两个同样的(PATH)属性。
5,强迫症患者此刻已经抱头痛哭,为什么要让我选择!!!
对啊,选择哪一个呢?为什么会有两个(PATH)呢?这里稍微说一下,windows是多用户,多任务 *** 作系统,一台电脑可以多个人用。多个人用是什么意思呢?五六个人凑一起打键盘?手摸着手,叠罗汉点击鼠标?当然不是这样。多用户的意思是,你可以在电脑上注册多个账号,比如上图的(chensuiyi)就是我自己的账户。A用户用这台电脑的时候,显示A用户安装过的软件和创建的文件,B用户登录的时候,显示B用户安装的软件和创建的文件。现在生活水平的提高和技术的发展,电脑已经基本个人化,不存在多个人不同时段公用一台电脑的事情了,所以多用户其实很少接触到。
好了,就算说完了这,这两个(PATH)还是如何选择呢?随便选一个就好了(那说这么多放屁啊!)。这里选择(系统变量)里面的那个(PATH)。
这里注意一下,系统变量里面设置的参数,所有登录的用户都会生效。
6,选中(PATH),点击【编辑】,把node所在的目录路径,放到最后,注意箭头处的那个分号!!!每个路径一个分号隔开!每个路径一个分号隔开!每个路径一个分号隔开!,好了,说三遍,你懂的。
点击【确定】,重新打开一次cmd命令行,记住,是重新打开一遍!!!再次输入node -v命令,如图,大功告成!收工!
结语
感谢您的观看,如有不足之处,欢迎批评指正。
本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)