-
node加载本地模块 路径形式模块
./
当前目录,不可省略
../
上一级目录,不可省略
文件后缀,.js
可以省略
如:require('./foo')
require('./foo.js')
-
加载核心模块的本质也是文件
核心模块文件一级被编译到了二进制文件中,我们只需要按名字就可以了
require('fs')
require('http')
-
加载第三方模块
-
凡是第三方模块都必须通过npm来下载
-
使用的时候就可以通过require(‘包名’)的方式来进行加载才可以使用
-
不可能有任何一个第三方包和核心模块的名字是一样的
即不是核心模块,也不是路径形式的模块 -
加载的顺序
-
先找到当前文件所处目录中的node_modules目录
-
找到文件下的包如 node_module/art-template
-
node_module/art-template/package.json文件
-
node_module/art-template/package.json文件的main属性
-
mian属性中就记录了art-template的入口模块
-
然后就加载使用这个第三方包,实际上最终加载的还是文件
-
如果package.json文件不存在或者main指定的入口模块是也没有则 node会自动找目录下的index.js
也就是说 index.js会作为一个默认备选项 -
如果以上所有,任何一个条件都不成立,则会进入上一级目录中的node_module目录查找
-
如果上一级还没有,则继续往上一级 直到当前磁盘根目录还找不到,最后报错
-
-
can not find module xxx
如实际没有引入art-template
var template = require('art-template')
注意:
我们一个项目有且只有一个node_modules 放在项目跟目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包,不会出现有多个node_modules
require方法加载 优先从缓存中加载