nodejs在加载外部自定义模块时对模块有查找顺序,找到后还会进行缓存。
查找顺序:
1. 相对路径,比如提供./ 或者../这种以'./'和‘..’开始的路径,简单的,就是相对当前位置的路径。
2.绝对路径,这时候将按以下顺序查找:
假设执行路径为C:\Intel\research\subFolder
那么查找顺序为
[ 'C:\\Intel\\research\\subFolder\\node_modules',
'C:\\Intel\\research\\node_modules',
'C:\\Intel\\node_modules',
'C:\\node_modules' ]
然后是['.']
然后是:
windows下%NODE_PATH%,%USERPROFILE%/.node_modules, %USERPROFILE%/.node_libraries
非windows下$NODE_PATH, $HOME/.node_modules, $HOME/.node_libraries
然后是node.exe目录的../../lib/node,所以这个具体取决于node二进制文件放哪里.
一旦加载成功就以模块的路径进行缓存,这里有一个陷阱。
就是如果父目录包含X模块,且存在引用X模块的代码。而子目录也是相同的情况。那么父目录和子目录下实际引用到的分别是自己目录下的那个X模块,而不是之前那个的复用。也就是要注意他缓存是匹配全路径的。