一.优先从缓存加载规则
二.路径形式的模块:
-
./ 当前目录,不可省略
-
../上一级目录,不可省略
-
/xxx
-
d:/a/foo.js几乎不用
-
.js后缀名可以省略
三.核心模块的本质文件:
- 核心模块文件已经被编译到了二进制文件中,我们只需要按照名字来加载就可以了
- require('fs')
- require('http')
四.第三方模块:
所有第三方模块都是通过npm下载来的,可以通过 require('包名') 的方式来进行加载才可以使用,第三方包不可能和核心模块的名字一样,既不是核心模块,也不是路路径形式的模块;
eg.
var template = require('art-template')
- 先找到当前文件的所处目录中的node-modules目录
- node-modules/art-template
- node-modules/art-template/package.json文件
- node-modules/art-template/package.json文件中的属性
- main属性中就记录了art-template 的入口模块
- 然后加载使用这个第三方包,(也就是文件)
Note:
如果pakage.json文件不存在或者main指定的入口模块是也没有,则node会自动找到目录下的index.js,index.js会作为一个默认选项;
如果以上任何一条件都不成立,则会进入上一级目录中的node-modules目录查找,如果上一级还是没有,就继续找上一级,最终找不到,就会报错:can not find module xxx ;
我们在项目根目录中放入node-modules文件,这样项目中的所有子目录中的代码就可以加载到