美文网首页
node模块载入机制

node模块载入机制

作者: 冷小谦 | 来源:发表于2018-12-03 14:53 被阅读6次

    node内模块以及载入顺序为:

    1. 内置模块
    2. 文件模块
    3. 文件目录模块
    4. node_modules模块

    内置模块

    var http = require('http');
    

    http即node内置模块

    文件模块

    绝对路径
    var myMod = require('/home/base/my_mod')
    相对路径
    var myMod = require('./my_mod')
    node中默认扩展名为js

    文件目录模块

    若直接require一个目录
    var myMod = require(./folder)
    node将搜索整个目录,node会假设目录就是一个包,先寻找package.json,若没有package.json就假设默认文件为index.js。若都没有则加载失败。
    package.json定义为:
    { "name": "pack", "main": "modA.js" }
    则目录返回模块modA.js,若package.json不存在,则寻找index.js。

    载入node_module模块

    如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的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)
    

    输入如下

    `

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

    相关文章

      网友评论

          本文标题:node模块载入机制

          本文链接:https://www.haomeiwen.com/subject/txuycqtx.html