模块定义和使用
在模块中, 上下文提供 require() 方法来引入外部模块。 对应引入的功能, 上下文提供了 exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在 一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个 模块,将方法挂载在exports对象上作为属性即可定义导出的方式:
// math.js
exports.add = function () {
var sum = 0,
i = 0,
args = arguments,
l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
在另一个文件中,我们通过require()方法引入模块后,就能调用定义的属性或方法了:
// program.js
var math = require('math');
exports.increment = function (val) {
return math.add(val, 1);
};
在Node中引入模块,需要经历如下3个步骤。
- (1) 路径分析
- (2) 文件定位
- (3) 编译执行
在Node中,模块分为两类:一类是Node提供的模块,称为核心模块;另一类是用户编写的 模块,称为文件模块。
- 核心模块部分在Node源代码的编译过程中,编译进了二进制执行文件。在Node进程启动 时,部分核心模块就被直接加载进内存中,所以这部分核心模块引入时,文件定位和编 译执行这两个步骤可以省略掉, 并且在路径分析中优先判断, 所以它的加载速度是最 快的。
- 文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速 度比核心模块慢。
Reference
- 《深入浅出Node.js》
FEATURED TAGS
algorithm
algorithmproblem
architecturalpattern
architecture
aws
c#
cachesystem
codis
compile
concurrentcontrol
database
dataformat
datastructure
debug
design
designpattern
distributedsystem
django
docker
domain
engineering
freebsd
git
golang
grafana
hackintosh
hadoop
hardware
hexo
http
hugo
ios
iot
java
javaee
javascript
kafka
kubernetes
linux
linuxcommand
linuxio
lock
macos
markdown
microservices
mysql
nas
network
networkprogramming
nginx
node.js
npm
oop
openwrt
operatingsystem
padavan
performance
programming
prometheus
protobuf
python
redis
router
security
shell
software testing
spring
sql
systemdesign
truenas
ubuntu
vmware
vpn
windows
wmware
wordpress
xml
zookeeper