手机版

跟我学node . js(4)——node . js的模块加载方式和机制

时间:2021-11-07 来源:互联网 编辑:宝哥软件园 浏览:

其他模块,例如通过NPM安装的第三方模块或本地模块,每个模块都将公开一个开放的应用编程接口。以便开发人员可以导入。如果复制代码如下: var MOD=REQUIRE(' Module _ NAME '),则通过NPM安装的内置模块或模块将加载到节点内部。require函数返回一个对象,该对象公开的API可以是一个函数、一个对象,也可以是函数、数组等属性,甚至可以是任何类型的JS对象。这里,Node模块的加载和缓存机制如下:1)加载一个核心模块;2)加载文件模块;3)加载文件夹模块;4)在node_modules中加载模块;5)自动缓存加载的模块;1)加载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’)3。加载文件目录的模块可以直接要求一个目录,假设有一个名为folder的目录。例如,复制代码如下:VAR MYMOD=REQUIRE('。/folder’)此时,Node会搜索整个文件夹目录,Node会假设该文件夹是一个包,并尝试查找包定义文件package.json,如果文件夹目录不包含package.json文件,Node会假设默认主文件是index.js,这意味着它会加载index.js.如果index.js也不存在,加载将失败。如果目录结构如下

Package.json的定义如下。复制的代码如下: {'name' :' pack ',' main' :' modA.js'}此时,要求('。/folder)将返回到moda.js模块.如果package.json不存在,将返回模块index.js。如果index.js也不存在,将发生加载异常。如果模块名称不是路径或内置模块,节点将尝试在当前目录的node_modules文件夹中进行搜索。如果在当前目录的Node_modules中找不到,节点将从父目录的node_modules中搜索,然后递归地向下到根目录。别担心,npm命令让我们可以轻松安装、卸载和更新node_modules目录。5.自动缓存加载的模块节点将缓存加载的模块,而不必每次都再次搜索。以下是modA.js:console.log的副本代码(' modA模块开始加载.')exports=function(){ console . log(' hi ')} console . log('加载了modA模块')。复制init.js的代码如下:varmod1=require('。/moda') varmod2=require('。/moda’)console . log(mod1===mod2)命令行执行:node init.js输入如下

可以看到,虽然需要两次,但是modA.js只执行了一次。Mod1和mod2是相同的,也就是说,两个引用都指向同一个模块对象。

版权声明:跟我学node . js(4)——node . js的模块加载方式和机制是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。