首先项目运行时,遇见代码中的 require('xxxx')
请求模块时,会先在当前目录下寻找 node_modules 文件夹,然后在其中如果找到某个模块,则读取其 package.json 文件,找到 入口模块 main
字段,执行相应的 js 程序,如果当前目录没有找到 node_modules 文件夹,则继续往上一层寻找,一层层抽丝拨茧,直到世界的尽头(当前项目路径的根目录),如果还没找到,就报错啦(提示找不到)~
windows下的目录可能长这样:
C:\Users\晓风\Desktop\JavaScript Learning\npm学习\demo
所以最先会在demo目录下尝试寻找 node_modules
为什么有时候,你明明 使用 npm install -g xxx 安装了 xxx 模块,也在项目中引用了,为什么还是提示找不到呢?
这是因为全局安装模式会装在一个其他的路径中,
比如在我的 windows 中长这样:
C:\Users\晓风\AppData\Roaming\npm\node_modules
第一个项目路径中,一层层回溯,逆流而上,可偏偏找不到,
如果可以倒退,那么到了 '晓风' 这一层目录时,可以选择进入 AppData 向前查找,是可以找到 node_modules 文件夹的,但是 node 说:对不起,我只会一直找到底,没有就拉倒,不会走两步再退一步的寻找,所以 从你的全世界路过~~~
这就是关于全局安装时很重要的一点,一般选择全局安装的package,多是一些命令行工具,很多时候,我们希望这些工具可以运行在 anywhere,不用切换目录,也不用为了寻找到可执行文件去手动指定超长的路径,只需要输入简单的命令,就可以完成。
这其实是全局安装时,npm 帮你把可执行的文件路径配置到了系统的环境变量中,让你可以任何地方使用。