手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >跟我学Node.js(四)---Node.js的模块载入方式与机制
跟我学Node.js(四)---Node.js的模块载入方式与机制
摘要:其它的如通过NPM安装的第三方模块(third-partymodules)或本地模块(localmodules),每个模块都会暴露一个公开的...

其它的如通过NPM安装的第三方模块(third-party modules)或本地模块(local modules),每个模块都会暴露一个公开的API。以便开发者可以导入。如

复制代码 代码如下:

var mod = require('module_name')

此句执行后,Node内部会载入内置模块或通过NPM安装的模块。require函数会返回一个对象,该对象公开的API可能是函数,对象,或者属性如函数,数组,甚至任意类型的JS对象。

这里列下node模块的载入及缓存机制

1)载入内置模块(A Core Module)

2)载入文件模块(A File Module)

3)载入文件目录模块(A Folder Module)

4)载入node_modules里的模块

5)自动缓存已载入模块

一、载入内置模块

Node的内置模块被编译为二进制形式,引用时直接使用名字而非文件路径。当第三方的模块和内置模块同名时,内置模块将覆盖第三方同名模块。因此命名时需要注意不要和内置模块同名。如获取一个http模块

复制代码 代码如下:

var http = require('http')

返回的http即是实现了HTTP功能Node的内置模块。

二、载入文件模块

绝对路径的

复制代码 代码如下:

var myMod = require('/home/base/my_mod')

或相对路径的

复制代码 代码如下:

var myMod = require('./my_mod')

注意,这里忽略了扩展名“.js”,以下是对等的

复制代码 代码如下:

var myMod = require('./my_mod')

var myMod = require('./my_mod.js')

三、载入文件目录模块

可以直接require一个目录,假设有一个目录名为folder,如

复制代码 代码如下:

var myMod = require('./folder')

此时,Node将搜索整个folder目录,Node会假设folder为一个包并试图找到包定义文件package.json。如果folder目录里没有包含package.json文件,Node会假设默认主文件为index.js,即会加载index.js。如果index.js也不存在,那么加载将失败。

假如目录结构如下

跟我学Node.js(四)---Node.js的模块载入方式与机制1

package.json定义如下

复制代码 代码如下:

{

"name": "pack",

"main": "modA.js"

}

此时 require('./folder') 将返回模块modA.js。如果package.json不存在,那么将返回模块index.js。如果index.js也不存在,那么将发生载入异常。

四、载入node_modules里的模块

如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的node_modules里搜索,这样递归下去直到根目录。

不必担心,npm命令可让我们很方便的去安装,卸载,更新node_modules目录。

五、自动缓存已载入模块

对于已加载的模块Node会缓存下来,而不必每次都重新搜索。下面是一个示例

modA.js

复制代码 代码如下:

console.log('模块modA开始加载...')

exports = function() {

console.log('Hi')

}

console.log('模块modA加载完毕')

init.js

复制代码 代码如下:

var mod1 = require('./modA')

var mod2 = require('./modA')

console.log(mod1 === mod2)

命令行执行:

node init.js

输入如下

跟我学Node.js(四)---Node.js的模块载入方式与机制2

可以看到虽然require了两次,但modA.js仍然只执行了一次。mod1和mod2是相同的,即两个引用都指向了同一个模块对象。

【跟我学Node.js(四)---Node.js的模块载入方式与机制】相关文章:

详解Node.js包的工程目录与NPM包管理器的使用

解析Node.js基于模块和包的代码部署方式

自动关闭的层

javasript实现密码的隐藏与显示

JavaScript中的Math.SQRT1_2属性使用简介

微信WeixinJSBridge API使用实例

浅析Javascript匿名函数与自执行函数

JavaScript中反正弦函数Math.asin()的使用简介

js实现键盘Enter键提交表单的方法

javascript带回调函数的异步脚本载入方法实例分析

精品推荐
分类导航