不要把秘密说给你的朋友,因为你的朋友也有朋友~
1.require()的基本用法
当Node遇到require(X)时,按照下面的顺序处理。
(1)如果X是内部模块(比如require('http'))
a.返回该模块
b.不再继续执行
(2)如果X以'./'或者'/'或者'../'开头
a.根据X所在的父模块,确定X的绝对路径
b.将X当做文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不在继续执行。
X
X.js
X.json
X.node
c.将X当做目录,依次查找下面文件,只要其中有一个存在,就返回该文件,不在继续执行。
X/package.json(main字段)
X/index.js
X/index.json
X/index.node
(3)如果X不带路径
a. 根据 X 所在的父模块,确定 X 可能的安装目录
b. 依次在每个目录中,将X当做文件名或者目录名加载
(4)抛出"not found"
举个例子:
脚本文件/home/ry/projects/foo.js执行了require('bar'),这属于上面的第三种情况,Node内部运行过程如下。
首先确定X的绝对路径可能是下面这些位置,依次搜索每一个目录。
/home/ry/projects/node_modules/bar
/home/ry/node_modules/bar
/home/node_modules/bar
/node_modules/bar
搜索时,Node先将bar当做文件名,依次尝试加载下面这些文件,只要有一个成功就返回。
bar
bar.js
bar.json
bar.node
如果不存在,说明bar可能是目录名,依次尝试加载下面文件。
bar/package.json(main字段)
bar/index.js
bar/index.json
bar/index.node
如果所有目录中,都无法找到bar对应的文件或者目录,就抛出一个错误。
愿我们有能力不向生活缴械投降---Lin