Node.js 模块加载机制
2013-09-22 23:40
218 查看
一、模块的类型
1、Node.js的模块可以分为两大类,一类是核心模块,另一类是文件模块。
2、核心模块就是Node.js标准API中提供的模块。核心模块通常编译成了二进制代码,可以直接通过require加载核心模块,例如require('fs')。
3、核心模块拥有最高的加载优先级,换言之如果有模块与其命名冲突,Node.js总是会加载核心模块。
4、文件模块则是存储为单独的文件(或文件夹)的模块,可能是JavaScript代码、JSON或编译好的C/C++代码。在不显式指定文件模块扩展名的时候,Node.js会分别试图加上.js、.json和.node扩展名。.js是JavaScript 代码,.json是JSON格式的文本,.node是编译好的C/C++代码。
5、如下图是Node.js模块的类型,从上到下加载优先级由高到低。
二、文件模块的加载方式
1、文件模块的加载有两种方式,一种是按路径加载,一种是查找node_modules文件夹。
2、按路径加载
如果require参数是一个绝对路径,那么就以绝对路径的方式查找模块名称,例如require(“E:/NodeDemo/module”) 将会按照优先级依次尝试加载E:/NodeDemo/module.js、E:/NodeDemo/module.json、E:/NodeDemo/module.node;如果require参数以“ ./ ”或“ ../ ”开头,那么则以相对路径的方式来查找模块。
3、通过查找node_modules目录加载模块
如果require参数不以“绝对路径”、“ ./ ”或“ ../ ”开头,而该模块又不是核心模块,那么就要通过查找node_modules目录加载模块了。使用npm获取的包通常就是以这种方式加载的。
加入在某个目录下执行npm命令安装了一个模块,会发现在该目录下出现了一个叫做node_modules的目录,比如安装了express模块(npm install express),然后在node_modules目录的外面一层,可以直接使用require('express') 来代替require('./node_modules/express')。
当require遇到一个既不是核心模块,又不是以路径形式表示的模块名称时,会试图在当前目录下的node_modules目录中来查找是不是有这样一个模块。如果没有找到,则会在当前目录的上一层中的node_modules目录中继续查找,反复执行这一过程,直到遇到根目录为止。
三、加载顺序
1、对于使用require(some_module) 时,Node.js的加载顺序如下:
如果some_module为核心模块,则直接加载。
如果some_module是一个绝对路径或者是相对路径,则按路径加载。
通过查找node_modules目录加载模块。
1、Node.js的模块可以分为两大类,一类是核心模块,另一类是文件模块。
2、核心模块就是Node.js标准API中提供的模块。核心模块通常编译成了二进制代码,可以直接通过require加载核心模块,例如require('fs')。
3、核心模块拥有最高的加载优先级,换言之如果有模块与其命名冲突,Node.js总是会加载核心模块。
4、文件模块则是存储为单独的文件(或文件夹)的模块,可能是JavaScript代码、JSON或编译好的C/C++代码。在不显式指定文件模块扩展名的时候,Node.js会分别试图加上.js、.json和.node扩展名。.js是JavaScript 代码,.json是JSON格式的文本,.node是编译好的C/C++代码。
5、如下图是Node.js模块的类型,从上到下加载优先级由高到低。
二、文件模块的加载方式
1、文件模块的加载有两种方式,一种是按路径加载,一种是查找node_modules文件夹。
2、按路径加载
如果require参数是一个绝对路径,那么就以绝对路径的方式查找模块名称,例如require(“E:/NodeDemo/module”) 将会按照优先级依次尝试加载E:/NodeDemo/module.js、E:/NodeDemo/module.json、E:/NodeDemo/module.node;如果require参数以“ ./ ”或“ ../ ”开头,那么则以相对路径的方式来查找模块。
3、通过查找node_modules目录加载模块
如果require参数不以“绝对路径”、“ ./ ”或“ ../ ”开头,而该模块又不是核心模块,那么就要通过查找node_modules目录加载模块了。使用npm获取的包通常就是以这种方式加载的。
加入在某个目录下执行npm命令安装了一个模块,会发现在该目录下出现了一个叫做node_modules的目录,比如安装了express模块(npm install express),然后在node_modules目录的外面一层,可以直接使用require('express') 来代替require('./node_modules/express')。
当require遇到一个既不是核心模块,又不是以路径形式表示的模块名称时,会试图在当前目录下的node_modules目录中来查找是不是有这样一个模块。如果没有找到,则会在当前目录的上一层中的node_modules目录中继续查找,反复执行这一过程,直到遇到根目录为止。
三、加载顺序
1、对于使用require(some_module) 时,Node.js的加载顺序如下:
如果some_module为核心模块,则直接加载。
如果some_module是一个绝对路径或者是相对路径,则按路径加载。
通过查找node_modules目录加载模块。
相关文章推荐
- node.js 模块加载机制
- Node.js---02、node.js 模块加载机制
- node.js(3) 模块加载机制
- 浅析node.js的模块加载机制
- Node.js模块以及模块加载机制
- Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()
- Node.js入门:模块机制
- nodejs require 加载机制
- node.js使用require()函数加载模块
- Node.js源码研究之模块组织加载
- 跟我学Node.js(四)---Node.js的模块载入方式与机制
- Node.js模块加载详解
- Node.js模块 加载笔记
- 跟我学Node.js(四)---Node.js的模块载入方式与机制
- 深入浅出Node.js(三):深入Node.js的模块机制
- Node.js模块机制
- Node.js中的模块机制学习笔记
- Node.js笔记之模块机制
- Node.js模块加载顺序
- Node.js的模块载入方式与机制